diff --git a/BasiliskII/src/MacOSX/BasiliskII.icns b/BasiliskII/src/MacOSX/BasiliskII.icns index b26870dd..ba38cb1f 100644 Binary files a/BasiliskII/src/MacOSX/BasiliskII.icns and b/BasiliskII/src/MacOSX/BasiliskII.icns differ diff --git a/BasiliskII/src/MacOSX/BasiliskII.xcodeproj/project.pbxproj b/BasiliskII/src/MacOSX/BasiliskII.xcodeproj/project.pbxproj index 20f9daa5..54a3e047 100644 --- a/BasiliskII/src/MacOSX/BasiliskII.xcodeproj/project.pbxproj +++ b/BasiliskII/src/MacOSX/BasiliskII.xcodeproj/project.pbxproj @@ -11,11 +11,6 @@ 752F26FB1F240E69001032B4 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 752F26FA1F240E69001032B4 /* IOKit.framework */; }; 752F27011F242BAF001032B4 /* prefs_sdl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 752F27001F242BAF001032B4 /* prefs_sdl.cpp */; }; 752F27031F242F51001032B4 /* xpram_sdl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 752F27021F242F51001032B4 /* xpram_sdl.cpp */; }; - 753252E91F535A0C0024025B /* build68k.c in Sources */ = {isa = PBXBuildFile; fileRef = 753252E51F5359040024025B /* build68k.c */; }; - 753252EE1F535DD10024025B /* defs68k.c in Sources */ = {isa = PBXBuildFile; fileRef = 753252ED1F535DD10024025B /* defs68k.c */; }; - 753253021F535F210024025B /* gencpu.c in Sources */ = {isa = PBXBuildFile; fileRef = 753253011F535F210024025B /* gencpu.c */; }; - 753253151F5363400024025B /* defs68k.c in Sources */ = {isa = PBXBuildFile; fileRef = 753252ED1F535DD10024025B /* defs68k.c */; }; - 753253201F53650F0024025B /* readcpu.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7539E0CE1F23B25A006B2DF2 /* readcpu.cpp */; }; 753253311F5368370024025B /* cpuemu_nf.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7532532C1F5368370024025B /* cpuemu_nf.cpp */; }; 753253321F5368370024025B /* cpuemu.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7532532D1F5368370024025B /* cpuemu.cpp */; }; 753253331F5368370024025B /* cpustbl_nf.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7532532E1F5368370024025B /* cpustbl_nf.cpp */; }; @@ -32,13 +27,7 @@ 7539E12D1F23B25A006B2DF2 /* ether.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7539DFD61F23B25A006B2DF2 /* ether.cpp */; }; 7539E12E1F23B25A006B2DF2 /* extfs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7539DFD71F23B25A006B2DF2 /* extfs.cpp */; }; 7539E12F1F23B25A006B2DF2 /* macos_util.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7539DFF81F23B25A006B2DF2 /* macos_util.cpp */; }; - 7539E1301F23B25A006B2DF2 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 7539DFFA1F23B25A006B2DF2 /* Assets.xcassets */; }; 7539E1341F23B25A006B2DF2 /* BasiliskII.icns in Resources */ = {isa = PBXBuildFile; fileRef = 7539E0021F23B25A006B2DF2 /* BasiliskII.icns */; }; - 7539E1381F23B25A006B2DF2 /* Credits.html in Resources */ = {isa = PBXBuildFile; fileRef = 7539E00A1F23B25A006B2DF2 /* Credits.html */; }; - 7539E13B1F23B25A006B2DF2 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 7539E00F1F23B25A006B2DF2 /* InfoPlist.strings */; }; - 7539E13E1F23B25A006B2DF2 /* HowTo.html in Resources */ = {isa = PBXBuildFile; fileRef = 7539E0141F23B25A006B2DF2 /* HowTo.html */; }; - 7539E14B1F23B25A006B2DF2 /* ToDo.html in Resources */ = {isa = PBXBuildFile; fileRef = 7539E02B1F23B25A006B2DF2 /* ToDo.html */; }; - 7539E14D1F23B25A006B2DF2 /* Versions.html in Resources */ = {isa = PBXBuildFile; fileRef = 7539E02E1F23B25A006B2DF2 /* Versions.html */; }; 7539E16C1F23B25A006B2DF2 /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7539E0651F23B25A006B2DF2 /* main.cpp */; }; 7539E16D1F23B25A006B2DF2 /* pict.c in Sources */ = {isa = PBXBuildFile; fileRef = 7539E0681F23B25A006B2DF2 /* pict.c */; }; 7539E16F1F23B25A006B2DF2 /* prefs_items.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7539E06C1F23B25A006B2DF2 /* prefs_items.cpp */; }; @@ -47,7 +36,6 @@ 7539E1721F23B25A006B2DF2 /* rsrc_patches.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7539E06F1F23B25A006B2DF2 /* rsrc_patches.cpp */; }; 7539E1731F23B25A006B2DF2 /* scsi.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7539E0701F23B25A006B2DF2 /* scsi.cpp */; }; 7539E1741F23B25A006B2DF2 /* audio_sdl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7539E0721F23B25A006B2DF2 /* audio_sdl.cpp */; }; - 7539E1751F23B25A006B2DF2 /* keycodes in Resources */ = {isa = PBXBuildFile; fileRef = 7539E0731F23B25A006B2DF2 /* keycodes */; }; 7539E1781F23B25A006B2DF2 /* serial.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7539E0771F23B25A006B2DF2 /* serial.cpp */; }; 7539E18D1F23B25A006B2DF2 /* slot_rom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7539E0A21F23B25A006B2DF2 /* slot_rom.cpp */; }; 7539E18E1F23B25A006B2DF2 /* sony.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7539E0A31F23B25A006B2DF2 /* sony.cpp */; }; @@ -58,43 +46,23 @@ 7539E19D1F23B25A006B2DF2 /* mathlib.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7539E0C21F23B25A006B2DF2 /* mathlib.cpp */; }; 7539E19E1F23B25A006B2DF2 /* rounding.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7539E0C41F23B25A006B2DF2 /* rounding.cpp */; }; 7539E1A01F23B25A006B2DF2 /* memory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7539E0C91F23B25A006B2DF2 /* memory.cpp */; }; - 7539E1A31F23B25A006B2DF2 /* table68k in Resources */ = {isa = PBXBuildFile; fileRef = 7539E0D11F23B25A006B2DF2 /* table68k */; }; 7539E1E11F23B25A006B2DF2 /* user_strings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7539E1221F23B25A006B2DF2 /* user_strings.cpp */; }; 7539E1E21F23B25A006B2DF2 /* video.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7539E1231F23B25A006B2DF2 /* video.cpp */; }; 7539E1E31F23B25A006B2DF2 /* xpram.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7539E1241F23B25A006B2DF2 /* xpram.cpp */; }; 7539E23F1F23B32A006B2DF2 /* bincue_unix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7539E1F01F23B329006B2DF2 /* bincue_unix.cpp */; }; - 7539E2451F23B32A006B2DF2 /* gtk-osx.patch in Resources */ = {isa = PBXBuildFile; fileRef = 7539E1F81F23B329006B2DF2 /* gtk-osx.patch */; }; - 7539E2471F23B32A006B2DF2 /* mkstandalone in Resources */ = {isa = PBXBuildFile; fileRef = 7539E1FA1F23B32A006B2DF2 /* mkstandalone */; }; - 7539E2491F23B32A006B2DF2 /* testlmem.sh in Resources */ = {isa = PBXBuildFile; fileRef = 7539E1FC1F23B32A006B2DF2 /* testlmem.sh */; }; 7539E24A1F23B32A006B2DF2 /* disk_sparsebundle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7539E1FD1F23B32A006B2DF2 /* disk_sparsebundle.cpp */; }; - 7539E24D1F23B32A006B2DF2 /* fbdevices in Resources */ = {isa = PBXBuildFile; fileRef = 7539E2011F23B32A006B2DF2 /* fbdevices */; }; - 7539E2501F23B32A006B2DF2 /* install-sh in Resources */ = {isa = PBXBuildFile; fileRef = 7539E2051F23B32A006B2DF2 /* install-sh */; }; - 7539E2551F23B32A006B2DF2 /* freebsd-i386.ld in Resources */ = {isa = PBXBuildFile; fileRef = 7539E20C1F23B32A006B2DF2 /* freebsd-i386.ld */; }; - 7539E2561F23B32A006B2DF2 /* linux-i386.ld in Resources */ = {isa = PBXBuildFile; fileRef = 7539E20D1F23B32A006B2DF2 /* linux-i386.ld */; }; - 7539E2571F23B32A006B2DF2 /* linux-ppc.ld in Resources */ = {isa = PBXBuildFile; fileRef = 7539E20E1F23B32A006B2DF2 /* linux-ppc.ld */; }; - 7539E2581F23B32A006B2DF2 /* linux-x86_64.ld in Resources */ = {isa = PBXBuildFile; fileRef = 7539E20F1F23B32A006B2DF2 /* linux-x86_64.ld */; }; - 7539E25D1F23B32A006B2DF2 /* egrep.m4 in Resources */ = {isa = PBXBuildFile; fileRef = 7539E2181F23B32A006B2DF2 /* egrep.m4 */; }; - 7539E25E1F23B32A006B2DF2 /* esd.m4 in Resources */ = {isa = PBXBuildFile; fileRef = 7539E2191F23B32A006B2DF2 /* esd.m4 */; }; - 7539E25F1F23B32A006B2DF2 /* gettext.m4 in Resources */ = {isa = PBXBuildFile; fileRef = 7539E21A1F23B32A006B2DF2 /* gettext.m4 */; }; - 7539E2601F23B32A006B2DF2 /* gtk-2.0.m4 in Resources */ = {isa = PBXBuildFile; fileRef = 7539E21B1F23B32A006B2DF2 /* gtk-2.0.m4 */; }; - 7539E2611F23B32A006B2DF2 /* gtk.m4 in Resources */ = {isa = PBXBuildFile; fileRef = 7539E21C1F23B32A006B2DF2 /* gtk.m4 */; }; - 7539E2631F23B32A006B2DF2 /* Makefile.in in Resources */ = {isa = PBXBuildFile; fileRef = 7539E21E1F23B32A006B2DF2 /* Makefile.in */; }; - 7539E2641F23B32A006B2DF2 /* mkinstalldirs in Resources */ = {isa = PBXBuildFile; fileRef = 7539E21F1F23B32A006B2DF2 /* mkinstalldirs */; }; 7539E2681F23B32A006B2DF2 /* rpc_unix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7539E2241F23B32A006B2DF2 /* rpc_unix.cpp */; }; 7539E26C1F23B32A006B2DF2 /* sshpty.c in Sources */ = {isa = PBXBuildFile; fileRef = 7539E22A1F23B32A006B2DF2 /* sshpty.c */; }; 7539E26D1F23B32A006B2DF2 /* strlcpy.c in Sources */ = {isa = PBXBuildFile; fileRef = 7539E22C1F23B32A006B2DF2 /* strlcpy.c */; }; 7539E26E1F23B32A006B2DF2 /* sys_unix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7539E22E1F23B32A006B2DF2 /* sys_unix.cpp */; }; 7539E26F1F23B32A006B2DF2 /* timer_unix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7539E2301F23B32A006B2DF2 /* timer_unix.cpp */; }; 7539E2701F23B32A006B2DF2 /* tinyxml2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7539E2311F23B32A006B2DF2 /* tinyxml2.cpp */; }; - 7539E2711F23B32A006B2DF2 /* tunconfig in Resources */ = {isa = PBXBuildFile; fileRef = 7539E2331F23B32A006B2DF2 /* tunconfig */; }; 7539E2801F23C4CA006B2DF2 /* main_unix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7539E27F1F23C4CA006B2DF2 /* main_unix.cpp */; }; 7539E2911F23C56F006B2DF2 /* prefs_editor_dummy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7539E2881F23C56F006B2DF2 /* prefs_editor_dummy.cpp */; }; 7539E2921F23C56F006B2DF2 /* scsi_dummy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7539E2891F23C56F006B2DF2 /* scsi_dummy.cpp */; }; 7539E2931F23C56F006B2DF2 /* serial_dummy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7539E28A1F23C56F006B2DF2 /* serial_dummy.cpp */; }; 7539E2971F23C5FD006B2DF2 /* newcpu.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7539E2961F23C5FD006B2DF2 /* newcpu.cpp */; }; 7539E29D1F23C83F006B2DF2 /* sys_darwin.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7539E29C1F23C83F006B2DF2 /* sys_darwin.cpp */; }; - 7539E29F1F23C939006B2DF2 /* fpu_uae.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7539E29E1F23C939006B2DF2 /* fpu_uae.cpp */; }; - 7539E2AB1F23CDB7006B2DF2 /* Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 7539E2AA1F23CDB7006B2DF2 /* Info.plist */; }; 756C1B341F252FC100620917 /* utils_macosx.mm in Sources */ = {isa = PBXBuildFile; fileRef = 756C1B331F252FC100620917 /* utils_macosx.mm */; }; 756C1B391F25306A00620917 /* AppKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 756C1B381F25306A00620917 /* AppKit.framework */; }; 757A2BF01F5AF9D6003EDB01 /* user_strings_unix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 757A2BEF1F5AF9D6003EDB01 /* user_strings_unix.cpp */; }; @@ -104,14 +72,12 @@ E413D92120D260BC00E437D8 /* tftp.c in Sources */ = {isa = PBXBuildFile; fileRef = E413D8F820D260B900E437D8 /* tftp.c */; }; E413D92220D260BC00E437D8 /* mbuf.c in Sources */ = {isa = PBXBuildFile; fileRef = E413D8F920D260B900E437D8 /* mbuf.c */; }; E413D92320D260BC00E437D8 /* ip_icmp.c in Sources */ = {isa = PBXBuildFile; fileRef = E413D8FB20D260B900E437D8 /* ip_icmp.c */; }; - E413D92420D260BC00E437D8 /* VERSION in Resources */ = {isa = PBXBuildFile; fileRef = E413D8FE20D260B900E437D8 /* VERSION */; }; E413D92520D260BC00E437D8 /* tcp_input.c in Sources */ = {isa = PBXBuildFile; fileRef = E413D90120D260B900E437D8 /* tcp_input.c */; }; E413D92620D260BC00E437D8 /* misc.c in Sources */ = {isa = PBXBuildFile; fileRef = E413D90220D260B900E437D8 /* misc.c */; }; E413D92720D260BC00E437D8 /* debug.c in Sources */ = {isa = PBXBuildFile; fileRef = E413D90520D260BA00E437D8 /* debug.c */; }; E413D92820D260BC00E437D8 /* tcp_subr.c in Sources */ = {isa = PBXBuildFile; fileRef = E413D90620D260BA00E437D8 /* tcp_subr.c */; }; E413D92920D260BC00E437D8 /* udp.c in Sources */ = {isa = PBXBuildFile; fileRef = E413D90720D260BA00E437D8 /* udp.c */; }; E413D92A20D260BC00E437D8 /* sbuf.c in Sources */ = {isa = PBXBuildFile; fileRef = E413D90920D260BA00E437D8 /* sbuf.c */; }; - E413D92B20D260BC00E437D8 /* COPYRIGHT in Resources */ = {isa = PBXBuildFile; fileRef = E413D90C20D260BA00E437D8 /* COPYRIGHT */; }; E413D92C20D260BC00E437D8 /* slirp.c in Sources */ = {isa = PBXBuildFile; fileRef = E413D90D20D260BA00E437D8 /* slirp.c */; }; E413D92D20D260BC00E437D8 /* tcp_timer.c in Sources */ = {isa = PBXBuildFile; fileRef = E413D91120D260BA00E437D8 /* tcp_timer.c */; }; E413D92E20D260BC00E437D8 /* socket.c in Sources */ = {isa = PBXBuildFile; fileRef = E413D91820D260BB00E437D8 /* socket.c */; }; @@ -125,40 +91,15 @@ E413D93820D2613500E437D8 /* ether_unix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E413D93720D2613500E437D8 /* ether_unix.cpp */; }; E413D93A20D2614E00E437D8 /* extfs_macosx.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E413D93920D2614E00E437D8 /* extfs_macosx.cpp */; }; E4150D1420D559800077C51A /* SDL2.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = E4150D1320D559800077C51A /* SDL2.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + E416BEE82410AA4E00751E6D /* runtool.c in Sources */ = {isa = PBXBuildFile; fileRef = E416BEE72410AA4E00751E6D /* runtool.c */; }; + E416BEEA2410AA9800751E6D /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E416BEE92410AA9800751E6D /* Security.framework */; }; + E416BEED2410AE0900751E6D /* etherhelpertool in Resources */ = {isa = PBXBuildFile; fileRef = E416BEEC2410AE0000751E6D /* etherhelpertool */; }; + E4555EED2354434B00139FCE /* Credits.html in Resources */ = {isa = PBXBuildFile; fileRef = 7539E00A1F23B25A006B2DF2 /* Credits.html */; }; E490334E20D3A5890012DD5F /* clip_macosx64.mm in Sources */ = {isa = PBXBuildFile; fileRef = E490334D20D3A5890012DD5F /* clip_macosx64.mm */; }; + E4D8245323543D9800849B78 /* fpu_ieee.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E4D8245223543D9700849B78 /* fpu_ieee.cpp */; }; + E4EE777523D7D71400BAE63A /* defs68k.c in Sources */ = {isa = PBXBuildFile; fileRef = E417913123D7D67C0009AD63 /* defs68k.c */; }; /* End PBXBuildFile section */ -/* Begin PBXContainerItemProxy section */ - 7532530B1F53611F0024025B /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 7539DFAA1F23B17E006B2DF2 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 753252D91F5358D30024025B; - remoteInfo = build68k; - }; - 7532531A1F5364030024025B /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 7539DFAA1F23B17E006B2DF2 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 753252F21F535E1E0024025B; - remoteInfo = gencpu; - }; - 7532531C1F53640B0024025B /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 7539DFAA1F23B17E006B2DF2 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 753253071F5360E30024025B; - remoteInfo = RunBuild68k; - }; - 7532531E1F5364170024025B /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 7539DFAA1F23B17E006B2DF2 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 753253161F5363D20024025B; - remoteInfo = RunGencpu; - }; -/* End PBXContainerItemProxy section */ - /* Begin PBXCopyFilesBuildPhase section */ 752F26F31F240140001032B4 /* Embed Frameworks */ = { isa = PBXCopyFilesBuildPhase; @@ -171,24 +112,6 @@ name = "Embed Frameworks"; runOnlyForDeploymentPostprocessing = 0; }; - 753252D81F5358D30024025B /* CopyFiles */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = /usr/share/man/man1/; - dstSubfolderSpec = 0; - files = ( - ); - runOnlyForDeploymentPostprocessing = 1; - }; - 753252F11F535E1E0024025B /* CopyFiles */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = /usr/share/man/man1/; - dstSubfolderSpec = 0; - files = ( - ); - runOnlyForDeploymentPostprocessing = 1; - }; /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ @@ -196,10 +119,7 @@ 752F26FA1F240E69001032B4 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = System/Library/Frameworks/IOKit.framework; sourceTree = SDKROOT; }; 752F27001F242BAF001032B4 /* prefs_sdl.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = prefs_sdl.cpp; sourceTree = ""; }; 752F27021F242F51001032B4 /* xpram_sdl.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = xpram_sdl.cpp; sourceTree = ""; }; - 753252DA1F5358D30024025B /* build68k */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = build68k; sourceTree = BUILT_PRODUCTS_DIR; }; 753252E51F5359040024025B /* build68k.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = build68k.c; sourceTree = ""; }; - 753252ED1F535DD10024025B /* defs68k.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = defs68k.c; path = build68k_output/defs68k.c; sourceTree = BUILT_PRODUCTS_DIR; }; - 753252F31F535E1E0024025B /* gencpu */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = gencpu; sourceTree = BUILT_PRODUCTS_DIR; }; 753253011F535F210024025B /* gencpu.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = gencpu.c; sourceTree = ""; }; 7532532C1F5368370024025B /* cpuemu_nf.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = cpuemu_nf.cpp; path = gencpu_output/cpuemu_nf.cpp; sourceTree = BUILT_PRODUCTS_DIR; }; 7532532D1F5368370024025B /* cpuemu.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = cpuemu.cpp; path = gencpu_output/cpuemu.cpp; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -349,7 +269,6 @@ 7539E28A1F23C56F006B2DF2 /* serial_dummy.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = serial_dummy.cpp; sourceTree = ""; }; 7539E2961F23C5FD006B2DF2 /* newcpu.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = newcpu.cpp; sourceTree = ""; }; 7539E29C1F23C83F006B2DF2 /* sys_darwin.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = sys_darwin.cpp; sourceTree = ""; }; - 7539E29E1F23C939006B2DF2 /* fpu_uae.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = fpu_uae.cpp; sourceTree = ""; }; 7539E2AA1F23CDB7006B2DF2 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 756C1B321F252FC100620917 /* utils_macosx.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = utils_macosx.h; sourceTree = ""; }; 756C1B331F252FC100620917 /* utils_macosx.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = utils_macosx.mm; sourceTree = ""; }; @@ -404,29 +323,22 @@ E413D93720D2613500E437D8 /* ether_unix.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ether_unix.cpp; sourceTree = ""; }; E413D93920D2614E00E437D8 /* extfs_macosx.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = extfs_macosx.cpp; sourceTree = ""; }; E4150D1320D559800077C51A /* SDL2.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SDL2.framework; path = /Library/Frameworks/SDL2.framework; sourceTree = ""; }; + E416BEE72410AA4E00751E6D /* runtool.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = runtool.c; sourceTree = ""; }; + E416BEE92410AA9800751E6D /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = System/Library/Frameworks/Security.framework; sourceTree = SDKROOT; }; + E416BEEB2410AB0E00751E6D /* etherhelpertool.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = etherhelpertool.c; sourceTree = ""; }; + E416BEEC2410AE0000751E6D /* etherhelpertool */ = {isa = PBXFileReference; lastKnownFileType = text; path = etherhelpertool; sourceTree = BUILT_PRODUCTS_DIR; }; + E417913123D7D67C0009AD63 /* defs68k.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = defs68k.c; path = gencpu_output/defs68k.c; sourceTree = BUILT_PRODUCTS_DIR; }; E490334D20D3A5890012DD5F /* clip_macosx64.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = clip_macosx64.mm; sourceTree = ""; }; + E4D8245223543D9700849B78 /* fpu_ieee.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = fpu_ieee.cpp; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 753252D71F5358D30024025B /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 753252F01F535E1E0024025B /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; 7539DFAF1F23B17E006B2DF2 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( E413D93620D260DA00E437D8 /* SDL2.framework in Frameworks */, + E416BEEA2410AA9800751E6D /* Security.framework in Frameworks */, 756C1B391F25306A00620917 /* AppKit.framework in Frameworks */, 752F26FB1F240E69001032B4 /* IOKit.framework in Frameworks */, 752F26F91F240E51001032B4 /* Foundation.framework in Frameworks */, @@ -488,6 +400,7 @@ 752F26F71F240E51001032B4 /* Frameworks */ = { isa = PBXGroup; children = ( + E416BEE92410AA9800751E6D /* Security.framework */, E413D93520D260DA00E437D8 /* SDL2.framework */, 756C1B381F25306A00620917 /* AppKit.framework */, 752F26FA1F240E69001032B4 /* IOKit.framework */, @@ -499,20 +412,12 @@ 753252FF1F535E5D0024025B /* generated src */ = { isa = PBXGroup; children = ( - 753253001F535E840024025B /* build68k output */, + E416BEEC2410AE0000751E6D /* etherhelpertool */, 7532532B1F53675E0024025B /* gencpu output */, ); name = "generated src"; sourceTree = ""; }; - 753253001F535E840024025B /* build68k output */ = { - isa = PBXGroup; - children = ( - 753252ED1F535DD10024025B /* defs68k.c */, - ); - name = "build68k output"; - sourceTree = ""; - }; 7532532B1F53675E0024025B /* gencpu output */ = { isa = PBXGroup; children = ( @@ -521,6 +426,7 @@ 7532532E1F5368370024025B /* cpustbl_nf.cpp */, 7532532F1F5368370024025B /* cpustbl.cpp */, 753253301F5368370024025B /* cputbl.h */, + E417913123D7D67C0009AD63 /* defs68k.c */, ); name = "gencpu output"; sourceTree = ""; @@ -540,8 +446,6 @@ isa = PBXGroup; children = ( 7539DFB21F23B17E006B2DF2 /* BasiliskII.app */, - 753252DA1F5358D30024025B /* build68k */, - 753252F31F535E1E0024025B /* gencpu */, ); name = Products; path = ../../../../../../../../Documents/Code/macemu/BasiliskII/src/MacOSX; @@ -604,6 +508,8 @@ 7539DFF91F23B25A006B2DF2 /* MacOSX */ = { isa = PBXGroup; children = ( + E416BEEB2410AB0E00751E6D /* etherhelpertool.c */, + E416BEE72410AA4E00751E6D /* runtool.c */, 7539E2AA1F23CDB7006B2DF2 /* Info.plist */, 7539E27E1F23BEB4006B2DF2 /* config.h */, 7539DFFA1F23B25A006B2DF2 /* Assets.xcassets */, @@ -675,7 +581,7 @@ 7539E0B31F23B25A006B2DF2 /* fpu */ = { isa = PBXGroup; children = ( - 7539E29E1F23C939006B2DF2 /* fpu_uae.cpp */, + E4D8245223543D9700849B78 /* fpu_ieee.cpp */, 7539E0B41F23B25A006B2DF2 /* core.h */, 7539E0B51F23B25A006B2DF2 /* exceptions.cpp */, 7539E0B61F23B25A006B2DF2 /* exceptions.h */, @@ -817,75 +723,7 @@ }; /* End PBXGroup section */ -/* Begin PBXLegacyTarget section */ - 753253071F5360E30024025B /* run_build68k */ = { - isa = PBXLegacyTarget; - buildArgumentsString = "$(ACTION)"; - buildConfigurationList = 753253081F5360E30024025B /* Build configuration list for PBXLegacyTarget "run_build68k" */; - buildPhases = ( - ); - buildToolPath = "$(PROJECT_DIR)/run_build68k_for_xcode.sh"; - buildWorkingDirectory = ""; - dependencies = ( - 7532530C1F53611F0024025B /* PBXTargetDependency */, - ); - name = run_build68k; - passBuildSettingsInEnvironment = 1; - productName = RunBuild68k; - }; - 753253161F5363D20024025B /* run_gencpu */ = { - isa = PBXLegacyTarget; - buildArgumentsString = "$(ACTION)"; - buildConfigurationList = 753253171F5363D20024025B /* Build configuration list for PBXLegacyTarget "run_gencpu" */; - buildPhases = ( - ); - buildToolPath = "$(PROJECT_DIR)/run_gencpu_for_xcode.sh"; - buildWorkingDirectory = ""; - dependencies = ( - 7532531B1F5364030024025B /* PBXTargetDependency */, - ); - name = run_gencpu; - passBuildSettingsInEnvironment = 1; - productName = RunGencpu; - }; -/* End PBXLegacyTarget section */ - /* Begin PBXNativeTarget section */ - 753252D91F5358D30024025B /* build68k */ = { - isa = PBXNativeTarget; - buildConfigurationList = 753252E31F5358D30024025B /* Build configuration list for PBXNativeTarget "build68k" */; - buildPhases = ( - 753252D61F5358D30024025B /* Sources */, - 753252D71F5358D30024025B /* Frameworks */, - 753252D81F5358D30024025B /* CopyFiles */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = build68k; - productName = build68k; - productReference = 753252DA1F5358D30024025B /* build68k */; - productType = "com.apple.product-type.tool"; - }; - 753252F21F535E1E0024025B /* gencpu */ = { - isa = PBXNativeTarget; - buildConfigurationList = 753252F71F535E1E0024025B /* Build configuration list for PBXNativeTarget "gencpu" */; - buildPhases = ( - 753252EF1F535E1E0024025B /* Sources */, - 753252F01F535E1E0024025B /* Frameworks */, - 753252F11F535E1E0024025B /* CopyFiles */, - ); - buildRules = ( - ); - dependencies = ( - 7532531D1F53640B0024025B /* PBXTargetDependency */, - ); - name = gencpu; - productName = gencpu; - productReference = 753252F31F535E1E0024025B /* gencpu */; - productType = "com.apple.product-type.tool"; - }; 7539DFB11F23B17E006B2DF2 /* BasiliskII */ = { isa = PBXNativeTarget; buildConfigurationList = 7539DFC61F23B17E006B2DF2 /* Build configuration list for PBXNativeTarget "BasiliskII" */; @@ -899,7 +737,6 @@ buildRules = ( ); dependencies = ( - 7532531F1F5364170024025B /* PBXTargetDependency */, ); name = BasiliskII; productName = BasiliskII; @@ -914,22 +751,6 @@ attributes = { LastUpgradeCheck = 0830; TargetAttributes = { - 753252D91F5358D30024025B = { - CreatedOnToolsVersion = 8.3.3; - ProvisioningStyle = Automatic; - }; - 753252F21F535E1E0024025B = { - CreatedOnToolsVersion = 8.3.3; - ProvisioningStyle = Automatic; - }; - 753253071F5360E30024025B = { - CreatedOnToolsVersion = 8.3.3; - ProvisioningStyle = Automatic; - }; - 753253161F5363D20024025B = { - CreatedOnToolsVersion = 8.3.3; - ProvisioningStyle = Automatic; - }; 7539DFB11F23B17E006B2DF2 = { CreatedOnToolsVersion = 8.3.3; ProvisioningStyle = Automatic; @@ -951,10 +772,6 @@ projectRoot = ""; targets = ( 7539DFB11F23B17E006B2DF2 /* BasiliskII */, - 753252D91F5358D30024025B /* build68k */, - 753252F21F535E1E0024025B /* gencpu */, - 753253071F5360E30024025B /* run_build68k */, - 753253161F5363D20024025B /* run_gencpu */, ); }; /* End PBXProject section */ @@ -964,35 +781,9 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 7539E25D1F23B32A006B2DF2 /* egrep.m4 in Resources */, - 7539E1A31F23B25A006B2DF2 /* table68k in Resources */, 7539E1341F23B25A006B2DF2 /* BasiliskII.icns in Resources */, - 7539E2601F23B32A006B2DF2 /* gtk-2.0.m4 in Resources */, - 7539E1381F23B25A006B2DF2 /* Credits.html in Resources */, - 7539E25E1F23B32A006B2DF2 /* esd.m4 in Resources */, - 7539E2631F23B32A006B2DF2 /* Makefile.in in Resources */, - 7539E2571F23B32A006B2DF2 /* linux-ppc.ld in Resources */, - 7539E24D1F23B32A006B2DF2 /* fbdevices in Resources */, - 7539E2501F23B32A006B2DF2 /* install-sh in Resources */, - 7539E1301F23B25A006B2DF2 /* Assets.xcassets in Resources */, - 7539E2641F23B32A006B2DF2 /* mkinstalldirs in Resources */, - 7539E2581F23B32A006B2DF2 /* linux-x86_64.ld in Resources */, - 7539E2451F23B32A006B2DF2 /* gtk-osx.patch in Resources */, - 7539E2AB1F23CDB7006B2DF2 /* Info.plist in Resources */, - 7539E2471F23B32A006B2DF2 /* mkstandalone in Resources */, - 7539E14B1F23B25A006B2DF2 /* ToDo.html in Resources */, - 7539E13E1F23B25A006B2DF2 /* HowTo.html in Resources */, - 7539E1751F23B25A006B2DF2 /* keycodes in Resources */, - E413D92B20D260BC00E437D8 /* COPYRIGHT in Resources */, - 7539E14D1F23B25A006B2DF2 /* Versions.html in Resources */, - E413D92420D260BC00E437D8 /* VERSION in Resources */, - 7539E2711F23B32A006B2DF2 /* tunconfig in Resources */, - 7539E2561F23B32A006B2DF2 /* linux-i386.ld in Resources */, - 7539E2551F23B32A006B2DF2 /* freebsd-i386.ld in Resources */, - 7539E13B1F23B25A006B2DF2 /* InfoPlist.strings in Resources */, - 7539E25F1F23B32A006B2DF2 /* gettext.m4 in Resources */, - 7539E2491F23B32A006B2DF2 /* testlmem.sh in Resources */, - 7539E2611F23B32A006B2DF2 /* gtk.m4 in Resources */, + E4555EED2354434B00139FCE /* Credits.html in Resources */, + E416BEED2410AE0900751E6D /* etherhelpertool in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1008,48 +799,35 @@ ); name = "Run Script"; outputPaths = ( + $BUILT_PRODUCTS_DIR/gencpu_output/cpuemu.cpp, + $BUILT_PRODUCTS_DIR/gencpu_output/cpuemu_nf.cpp, + $BUILT_PRODUCTS_DIR/gencpu_output/cpustbl.cpp, + $BUILT_PRODUCTS_DIR/gencpu_output/cpustbl_nf.cpp, + $BUILT_PRODUCTS_DIR/gencpu_output/defs68k.c, ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "# ${PROJECT_DIR}/generate_cpu_srcs_for_xcode.sh"; + shellScript = "make -f Makefile.gencpu\ncc etherhelpertool.c -framework Security -o $BUILT_PRODUCTS_DIR/etherhelpertool\n"; }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ - 753252D61F5358D30024025B /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 753252E91F535A0C0024025B /* build68k.c in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 753252EF1F535E1E0024025B /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 753253021F535F210024025B /* gencpu.c in Sources */, - 753253201F53650F0024025B /* readcpu.cpp in Sources */, - 753253151F5363400024025B /* defs68k.c in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; 7539DFAE1F23B17E006B2DF2 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + E4EE777523D7D71400BAE63A /* defs68k.c in Sources */, 7539E19E1F23B25A006B2DF2 /* rounding.cpp in Sources */, 7539E29D1F23C83F006B2DF2 /* sys_darwin.cpp in Sources */, 7539E1291F23B25A006B2DF2 /* video_blit.cpp in Sources */, E413D93320D260BC00E437D8 /* cksum.c in Sources */, E413D92920D260BC00E437D8 /* udp.c in Sources */, + E4D8245323543D9800849B78 /* fpu_ieee.cpp in Sources */, 7539E1A01F23B25A006B2DF2 /* memory.cpp in Sources */, E40CEEC620D7910E00BCB88D /* SDLMain.m in Sources */, 753253351F53688D0024025B /* readcpu.cpp in Sources */, 7539E1741F23B25A006B2DF2 /* audio_sdl.cpp in Sources */, - 753252EE1F535DD10024025B /* defs68k.c in Sources */, E413D93120D260BC00E437D8 /* ip_output.c in Sources */, - 7539E29F1F23C939006B2DF2 /* fpu_uae.cpp in Sources */, 7539E1E21F23B25A006B2DF2 /* video.cpp in Sources */, 7539E18F1F23B25A006B2DF2 /* timer.cpp in Sources */, 7539E1711F23B25A006B2DF2 /* rom_patches.cpp in Sources */, @@ -1101,6 +879,7 @@ E413D92720D260BC00E437D8 /* debug.c in Sources */, E413D92220D260BC00E437D8 /* mbuf.c in Sources */, 7539E19D1F23B25A006B2DF2 /* mathlib.cpp in Sources */, + E416BEE82410AA4E00751E6D /* runtool.c in Sources */, E413D93020D260BC00E437D8 /* ip_input.c in Sources */, 752F27031F242F51001032B4 /* xpram_sdl.cpp in Sources */, 7539E16D1F23B25A006B2DF2 /* pict.c in Sources */, @@ -1124,29 +903,6 @@ }; /* End PBXSourcesBuildPhase section */ -/* Begin PBXTargetDependency section */ - 7532530C1F53611F0024025B /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 753252D91F5358D30024025B /* build68k */; - targetProxy = 7532530B1F53611F0024025B /* PBXContainerItemProxy */; - }; - 7532531B1F5364030024025B /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 753252F21F535E1E0024025B /* gencpu */; - targetProxy = 7532531A1F5364030024025B /* PBXContainerItemProxy */; - }; - 7532531D1F53640B0024025B /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 753253071F5360E30024025B /* run_build68k */; - targetProxy = 7532531C1F53640B0024025B /* PBXContainerItemProxy */; - }; - 7532531F1F5364170024025B /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 753253161F5363D20024025B /* run_gencpu */; - targetProxy = 7532531E1F5364170024025B /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - /* Begin PBXVariantGroup section */ 7539E00F1F23B25A006B2DF2 /* InfoPlist.strings */ = { isa = PBXVariantGroup; @@ -1159,70 +915,6 @@ /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ - 753252DE1F5358D30024025B /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_CXX_LIBRARY = "libc++"; - GCC_WARN_INHIBIT_ALL_WARNINGS = YES; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = Debug; - }; - 753252DF1F5358D30024025B /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_CXX_LIBRARY = "libc++"; - GCC_WARN_INHIBIT_ALL_WARNINGS = YES; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = Release; - }; - 753252F81F535E1E0024025B /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_CXX_LIBRARY = "libc++"; - GCC_WARN_INHIBIT_ALL_WARNINGS = YES; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = Debug; - }; - 753252F91F535E1E0024025B /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_CXX_LIBRARY = "libc++"; - GCC_WARN_INHIBIT_ALL_WARNINGS = YES; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = Release; - }; - 753253091F5360E30024025B /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = Debug; - }; - 7532530A1F5360E30024025B /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = Release; - }; - 753253181F5363D20024025B /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = Debug; - }; - 753253191F5363D20024025B /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = Release; - }; 7539DFC41F23B17E006B2DF2 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -1358,6 +1050,11 @@ GCC_C_LANGUAGE_STANDARD = "compiler-default"; GCC_ENABLE_PASCAL_STRINGS = NO; GCC_INLINES_ARE_PRIVATE_EXTERN = NO; + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(inherited)", + ENABLE_MACOSX_ETHERHELPER, + HAVE_CONFIG_H, + ); GCC_SYMBOLS_PRIVATE_EXTERN = NO; GCC_USE_STANDARD_INCLUDE_SEARCHING = YES; GCC_WARN_CHECK_SWITCH_STATEMENTS = NO; @@ -1376,7 +1073,7 @@ ONLY_ACTIVE_ARCH = NO; OTHER_CFLAGS = ""; PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; - PRODUCT_BUNDLE_IDENTIFIER = com.basiliskii.BasiliskII; + PRODUCT_BUNDLE_IDENTIFIER = net.cebix.basilisk; PRODUCT_NAME = "$(TARGET_NAME)"; USE_HEADERMAP = YES; VALID_ARCHS = x86_64; @@ -1410,6 +1107,11 @@ GCC_ENABLE_PASCAL_STRINGS = NO; GCC_INLINES_ARE_PRIVATE_EXTERN = NO; GCC_OPTIMIZATION_LEVEL = 3; + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(inherited)", + ENABLE_MACOSX_ETHERHELPER, + HAVE_CONFIG_H, + ); GCC_SYMBOLS_PRIVATE_EXTERN = NO; GCC_USE_STANDARD_INCLUDE_SEARCHING = YES; GCC_WARN_CHECK_SWITCH_STATEMENTS = NO; @@ -1427,7 +1129,7 @@ MACOSX_DEPLOYMENT_TARGET = 10.7; OTHER_CFLAGS = ""; PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; - PRODUCT_BUNDLE_IDENTIFIER = com.basiliskii.BasiliskII; + PRODUCT_BUNDLE_IDENTIFIER = net.cebix.basilisk; PRODUCT_NAME = "$(TARGET_NAME)"; USE_HEADERMAP = YES; VALID_ARCHS = x86_64; @@ -1438,42 +1140,6 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 753252E31F5358D30024025B /* Build configuration list for PBXNativeTarget "build68k" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 753252DE1F5358D30024025B /* Debug */, - 753252DF1F5358D30024025B /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 753252F71F535E1E0024025B /* Build configuration list for PBXNativeTarget "gencpu" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 753252F81F535E1E0024025B /* Debug */, - 753252F91F535E1E0024025B /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 753253081F5360E30024025B /* Build configuration list for PBXLegacyTarget "run_build68k" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 753253091F5360E30024025B /* Debug */, - 7532530A1F5360E30024025B /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 753253171F5363D20024025B /* Build configuration list for PBXLegacyTarget "run_gencpu" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 753253181F5363D20024025B /* Debug */, - 753253191F5363D20024025B /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; 7539DFAD1F23B17E006B2DF2 /* Build configuration list for PBXProject "BasiliskII" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/BasiliskII/src/MacOSX/Info.plist b/BasiliskII/src/MacOSX/Info.plist index 391fb133..da3aae24 100644 --- a/BasiliskII/src/MacOSX/Info.plist +++ b/BasiliskII/src/MacOSX/Info.plist @@ -11,7 +11,7 @@ CFBundleIconFile BasiliskII.icns CFBundleIdentifier - + $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName diff --git a/BasiliskII/src/MacOSX/Makefile.gencpu b/BasiliskII/src/MacOSX/Makefile.gencpu new file mode 100644 index 00000000..2e2ec45e --- /dev/null +++ b/BasiliskII/src/MacOSX/Makefile.gencpu @@ -0,0 +1,27 @@ +SRC = $(PROJECT_DIR)/../uae_cpu +DST = $(BUILT_PRODUCTS_DIR)/gencpu_output +VPATH = $(SRC) +CFLAGS = -DUSE_XCODE=1 -I. -I../uae_cpu -I../UNIX +CXXFLAGS = -stdlib=libc++ $(CFLAGS) +OBJS = $(addprefix $(DST)/, defs68k.o gencpu.o readcpu.o) + +all: $(DST)/gencpu + cd $(DST); ./gencpu + +$(DST)/gencpu: $(OBJS) + $(CXX) $(CXXFLAGS) -o $@ $^ + +$(DST)/%.o: %.c + $(CC) $(CFLAGS) -o $@ -c $< + +$(DST)/%.o: %.cpp + $(CXX) $(CXXFLAGS) -o $@ -c $< + +$(DST)/defs68k.c: $(DST)/build68k + $< < $(SRC)/table68k > $@ + +$(DST)/build68k: $(SRC)/build68k.c + mkdir -p $(DST) + $(CC) $(CFLAGS) -o $@ $< + +clean:; rm -fr $(DST) diff --git a/BasiliskII/src/MacOSX/config.h b/BasiliskII/src/MacOSX/config.h index ab1f6ee5..9b853b47 100644 --- a/BasiliskII/src/MacOSX/config.h +++ b/BasiliskII/src/MacOSX/config.h @@ -815,7 +815,6 @@ don't define. */ /* #undef uintmax_t */ -#define FPU_UAE 1 -//#define FPU_IMPLEMENTATION 1 +#define FPU_IEEE #endif diff --git a/BasiliskII/src/MacOSX/etherhelpertool.c b/BasiliskII/src/MacOSX/etherhelpertool.c new file mode 100644 index 00000000..2b1073e6 --- /dev/null +++ b/BasiliskII/src/MacOSX/etherhelpertool.c @@ -0,0 +1,580 @@ +/* + * etherhelpertool.c - Reads and writes raw ethernet packets usng bpf + * interface. + * + * Copyright (C) 2010, Daniel Sumorok + * + * Basilisk II (C) 1997-2008 Christian Bauer + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include +#include + +#include +#include +#include +#include +#include +#include + +#include + +#include +#include +#include +#include +#include + +#include + +#include + +#define STR_MAX 256 +#define MAX_ARGV 10 + +static int open_bpf(char *ifname); +static int open_tap(char *ifname); +static int retreive_auth_info(void); +static int main_loop(int sd, int use_bpf); +static int run_cmd(const char *cmd); +static void handler(int signum); +static int install_signal_handlers(); +static void do_exit(); + +static char remove_bridge[STR_MAX]; +static const char *exec_name = "etherhelpertool"; + +int main(int argc, char **argv) +{ + char *if_name; + int ret = 255; + int sd; + int tapNum; + int use_bpf; + + if (argc != 2) { + return 255; + } + + if_name = argv[1]; + + do { + ret = retreive_auth_info(); + if (ret != 0) { + fprintf(stderr, "%s: authorization failed.\n", + exec_name); + ret = 254; + break; + } + + if (strncmp(if_name, "tap", 3) == 0) { + sd = open_tap(if_name); + use_bpf = 0; + } else { + sd = open_bpf(if_name); + use_bpf = 1; + } + + if (sd < 0) { + fprintf(stderr, "%s: open device failed.\n", + exec_name); + ret = 253; + break; + } + + if (install_signal_handlers() != 0) { + fprintf(stderr, + "%s: failed to install signal handers.\n", + exec_name); + ret = 252; + break; + } + + ret = main_loop(sd, use_bpf); + close(sd); + } while (0); + + do_exit(); + + return ret; +} + +static int main_loop(int sd, int use_bpf) +{ + fd_set readSet; + char *outgoing, *incoming; + unsigned short *out_len; + unsigned short *in_len; + int in_index, out_index; + u_int blen = 0; + int ret; + int fret = 0; + struct bpf_hdr *hdr; + int pkt_len; + int frame_len; + int pad; + char c = 0; + + if (use_bpf) { + if (ioctl(sd, BIOCGBLEN, &blen) < 0) { + fprintf(stderr, + "%s: ioctl() failed.\n", + exec_name); + return -1; + } + } else { + blen = 4096; + } + + incoming = malloc(blen); + if (incoming == NULL) { + fprintf(stderr, + "%s: malloc() failed.\n", + exec_name); + return -2; + } + + outgoing = malloc(blen); + if (outgoing == NULL) { + free(outgoing); + fprintf(stderr, + "%s: malloc() failed.\n", + exec_name); + return -3; + } + + in_index = 0; + out_index = 0; + + out_len = (unsigned short *)outgoing; + + /* Let our parent know we are ready for business. */ + write(0, &c, 1); + + while (1) { + int i; + FD_ZERO(&readSet); + FD_SET(0, &readSet); + FD_SET(sd, &readSet); + + ret = select(sd + 1, &readSet, NULL, NULL, NULL); + if (ret < 0) { + fprintf(stderr, + "%s: select() failed.\n", + exec_name); + fret = -4; + break; + } + + if (FD_ISSET(0, &readSet)) { + if (out_index < 2) { + ret = read(0, outgoing + out_index, 2-out_index); + } else { + ret = read(0, outgoing + out_index, *out_len - out_index + 2); + } + + if (ret < 1) { + if(ret < 0) { + fprintf(stderr, + "%s: read() failed.\n", + exec_name); + } + fret = -5; + break; + } + + out_index += ret; + if (out_index > 1) { + if ((*out_len + 2) > blen) { + fret = -6; + break; + } + + if (out_index == (*out_len + 2)) { + ret = write(sd, out_len + 1, *out_len); + if (ret != *out_len) { + fprintf(stderr, + "%s: write() failed.\n", + exec_name); + fret = -7; + break; + } + out_index = 0; + } + } + + } + + if (use_bpf && FD_ISSET(sd, &readSet)) { + int i; + + ret = read(sd, incoming, blen); + if (ret < 1) { + if(ret < 0) { + fprintf(stderr, + "%s: read() failed %d.\n", + exec_name, errno); + } + fret = -8; + break; + } + + hdr = (struct bpf_hdr *)incoming; + in_len = (unsigned short *)(incoming + 16); + + do { + pkt_len = hdr->bh_caplen; + frame_len = pkt_len + 18; + + if ((pkt_len < 0) || (frame_len > ret) || (frame_len < 0)) { + fret = -9; + break; + } + *in_len = pkt_len; + + if (write(0, in_len, pkt_len + 2) < (pkt_len + 2)) { + fret = -10; + break; + } + + if ((frame_len & 0x03) == 0) { + pad = 0; + } else { + pad = 4 - (frame_len & 0x03); + } + + ret -= (frame_len + pad); + hdr = (struct bpf_hdr *)((unsigned char *)hdr + frame_len + pad); + in_len = (unsigned short *)((unsigned char *)hdr + 16); + } while (ret > 0); + + if (fret != 0) { + fprintf(stderr, + "%s: fret == %d.\n", + exec_name, fret); + break; + } + } + + if (!use_bpf && FD_ISSET(sd, &readSet)) { + in_len = (unsigned short *)incoming; + + pkt_len = read(sd, in_len + 1, blen-2); + if (pkt_len < 14) { + fprintf(stderr, + "%s: read() returned %d.\n", + exec_name, pkt_len); + fret = -8; + break; + } + + *in_len = pkt_len; + if (write(0, in_len, pkt_len + 2) < (pkt_len + 2)) { + fprintf(stderr, + "%s: write() failed\n", + exec_name); + fret = -10; + break; + } + + } + + } + + free(incoming); + free(outgoing); + + return fret; +} + +static int retreive_auth_info(void) +{ + AuthorizationRef aRef; + OSStatus status; + AuthorizationRights myRights; + AuthorizationRights *newRights; + AuthorizationItem *myItem; + AuthorizationItem myItems[1]; + AuthorizationItemSet *mySet; + int i; + + status = AuthorizationCopyPrivilegedReference(&aRef, kAuthorizationFlagDefaults); + if (status != errAuthorizationSuccess) { + return -1; + } + + status = AuthorizationCopyInfo(aRef, NULL, &mySet); + if (status != errAuthorizationSuccess) { + AuthorizationFree(aRef, kAuthorizationFlagDestroyRights); + return -1; + } + + myItems[0].name = "system.privilege.admin"; + myItems[0].valueLength = 0; + myItems[0].value = NULL; + myItems[0].flags = 0; + + myRights.count = sizeof (myItems) / sizeof (myItems[0]); + myRights.items = myItems; + + status = AuthorizationCopyRights(aRef, &myRights, NULL, + kAuthorizationFlagExtendRights, + &newRights); + if (status != errAuthorizationSuccess) { + AuthorizationFreeItemSet(mySet); + AuthorizationFree(aRef, kAuthorizationFlagDestroyRights); + return -2; + } + + AuthorizationFreeItemSet(newRights); + AuthorizationFreeItemSet(mySet); + AuthorizationFree(aRef, kAuthorizationFlagDestroyRights); + + return 0; +} + +static int open_tap(char *ifname) +{ + char str[STR_MAX] = {0}; + char ifstr[STR_MAX] = {0}; + char *interface; + char *address = NULL; + char *netmask = NULL; + char *bridge = NULL; + char *bridged_if = NULL; + int sd; + + snprintf(ifstr, STR_MAX, "%s", ifname); + interface = strtok(ifstr, "/"); + bridge = strtok(NULL, "/"); + if (bridge != NULL) { + bridged_if = strtok(NULL, "/"); + } + interface = strtok(ifstr, ":"); + + address = strtok(NULL, ":"); + + if (address != NULL) { + netmask = strtok(NULL, ":"); + } + + snprintf(str, STR_MAX, "/dev/%s", interface); + + sd = open(str, O_RDWR); + if (sd < 0) { + fprintf(stderr, "%s: Failed to open %s\n", + exec_name, interface); + return -1; + } + + if (address == NULL) { + snprintf(str, STR_MAX, "/sbin/ifconfig %s up", interface); + } else if (netmask == NULL) { + snprintf(str, STR_MAX, "/sbin/ifconfig %s %s", + interface, address); + } else { + snprintf(str, STR_MAX, "/sbin/ifconfig %s %s netmask %s", + interface, address, netmask); + } + + if (run_cmd(str) != 0) { + fprintf(stderr, "%s: Failed to configure %s\n", + exec_name, interface); + close(sd); + return -1; + } + + if (bridge != NULL) { + /* Check to see if bridge is alread up */ + snprintf(str, STR_MAX, "/sbin/ifconfig %s", bridge); + if (run_cmd(str) == 0) { + /* bridge is already up */ + if (bridged_if != NULL) { + fprintf(stderr, "%s: Warning: %s already exists, so %s was not added.\n", + exec_name, bridge, bridged_if); + } + } else { + snprintf(str, STR_MAX, "/sbin/ifconfig %s create", bridge); + if (run_cmd(str) != 0) { + fprintf(stderr, "%s: Failed to create %s\n", + exec_name, bridge); + close(sd); + return -1; + } + strlcpy(remove_bridge, bridge, STR_MAX); + + snprintf(str, STR_MAX, "/sbin/ifconfig %s up", bridge); + if (run_cmd(str) != 0) { + fprintf(stderr, "%s: Failed to open %s\n", + exec_name, bridge); + close(sd); + return -1; + } + + if (bridged_if != NULL) { + snprintf(str, STR_MAX, "/sbin/ifconfig %s addm %s", + bridge, bridged_if); + if (run_cmd(str) != 0) { + fprintf(stderr, "%s: Failed to add %s to %s\n", + exec_name, bridged_if, bridge); + close(sd); + return -1; + } + } + } + + snprintf(str, STR_MAX, "/sbin/ifconfig %s addm %s", + bridge, interface); + if (run_cmd(str) != 0) { + fprintf(stderr, "%s: Failed to add %s to %s\n", + exec_name, interface, bridge); + close(sd); + return -1; + } + } + + return sd; +} + +static int open_bpf(char *ifname) +{ + u_int blen = 0; + struct ifreq ifreq; + u_int arg; + + int sd = open("/dev/bpf2", O_RDWR); + + if (sd < 0) { + return -1; + } + + if (ioctl(sd, BIOCGBLEN, &blen) < 0) { + close(sd); + return -2; + } + + bzero(&ifreq, sizeof(ifreq)); + strncpy(ifreq.ifr_name, ifname, IFNAMSIZ); + + arg = 0; + if (ioctl(sd, BIOCSETIF, &ifreq) < 0) { + close(sd); + return -3; + } + + arg = 0; + if (ioctl(sd, BIOCSSEESENT, &arg) < 0) { + close(sd); + return -4; + } + + arg = 1; + if (ioctl(sd, BIOCPROMISC, &arg) < 0) { + close(sd); + return -5; + } + + arg = 1; + if (ioctl(sd, BIOCIMMEDIATE, &arg) < 0) { + close(sd); + return -6; + } + + return sd; +} + +static int run_cmd(const char *cmd) { + char cmd_buffer[STR_MAX] = {0}; + char *argv[MAX_ARGV + 1] = {0}; + int i; + pid_t pid, waitpid; + int status = 0; + + /* Collect arguments */ + strncpy(cmd_buffer, cmd, STR_MAX-1); + + argv[0] = strtok(cmd_buffer, " "); + for (i=1; i "./defs68k.c" - ls -al - ;; -esac diff --git a/BasiliskII/src/MacOSX/run_gencpu_for_xcode.sh b/BasiliskII/src/MacOSX/run_gencpu_for_xcode.sh deleted file mode 100755 index e457b8fa..00000000 --- a/BasiliskII/src/MacOSX/run_gencpu_for_xcode.sh +++ /dev/null @@ -1,37 +0,0 @@ -#!/bin/bash -e - -# -# run_gemcpu_for_xcode.sh -# -# Generates files for 68k emulation, via UAE's virtual cpu, for use on Mac OS X hosts -# - -if [ ! "$BUILT_PRODUCTS_DIR" ] || [ ! "$PROJECT_DIR" ]; then - echo "ERROR: $(basename $0) must be run from an Xcode 'External Build System' target" - exit 1 -fi - -# Log some debugging information -echo "1=$1" -echo "BUILT_PRODUCTS_DIR=$BUILT_PRODUCTS_DIR" -echo "PROJECT_DIR=$PROJECT_DIR" - -# Perform actions, given the passed-in build step -case "$1" in - "clean") - echo "Cleaning gencpu output(s)" - rm -rf "$BUILT_PRODUCTS_DIR/gencpu_output" - ;; - "") - if [ ! -d "$BUILT_PRODUCTS_DIR" ]; then - echo "No built products directory" - exit 1 - fi - echo "Running gencpu" - cd "$BUILT_PRODUCTS_DIR" - mkdir -p gencpu_output - cd gencpu_output - "$BUILT_PRODUCTS_DIR/gencpu" - ls -al - ;; -esac diff --git a/BasiliskII/src/MacOSX/runtool.c b/BasiliskII/src/MacOSX/runtool.c new file mode 100644 index 00000000..77c38a43 --- /dev/null +++ b/BasiliskII/src/MacOSX/runtool.c @@ -0,0 +1,136 @@ +/* + * runtool.m - Run an external program as root for networking + * Copyright (C) 2010, Daniel Sumorok + * + * Basilisk II (C) 1997-2008 Christian Bauer + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include +#include + +#include +#include +#include +#include +#include + +#include + +#include +#include +#include +#include +#include + +#include + +#include + +FILE * run_tool(const char *if_name, const char *tool_name); + +FILE * run_tool(const char *if_name, const char *tool_name) +{ + OSStatus auth_status; + FILE *fp = NULL; + char *args[] = {NULL, NULL, NULL}; + int ret; + char path_buffer[256]; + AuthorizationFlags auth_flags; + AuthorizationRef auth_ref; + AuthorizationItem auth_items[1]; + AuthorizationRights auth_rights; + CFBundleRef bundle_ref; + CFURLRef url_ref; + CFStringRef path_str; + CFStringRef tool_name_str; + char c; + + bundle_ref = CFBundleGetMainBundle(); + if(bundle_ref == NULL) { + return NULL; + } + + tool_name_str = CFStringCreateWithCString(NULL, tool_name, + kCFStringEncodingUTF8); + + url_ref = CFBundleCopyResourceURL(bundle_ref, tool_name_str, + NULL, NULL); + CFRelease(tool_name_str); + + if(url_ref == NULL) { + return NULL; + } + + path_str = CFURLCopyFileSystemPath(url_ref, kCFURLPOSIXPathStyle); + CFRelease(url_ref); + + if(path_str == NULL) { + return NULL; + } + + if(!CFStringGetCString(path_str, path_buffer, sizeof(path_buffer), + kCFStringEncodingUTF8)) { + CFRelease(path_str); + return NULL; + } + CFRelease(path_str); + + args[0] = (char *)tool_name; + args[1] = (char *)if_name; + + auth_flags = kAuthorizationFlagExtendRights | + kAuthorizationFlagInteractionAllowed | + kAuthorizationFlagPreAuthorize; + + auth_items[0].name = "system.privilege.admin"; + auth_items[0].valueLength = 0; + auth_items[0].value = NULL; + auth_items[0].flags = 0; + + auth_rights.count = sizeof (auth_items) / sizeof (auth_items[0]); + auth_rights.items = auth_items; + + auth_status = AuthorizationCreate(&auth_rights, + kAuthorizationEmptyEnvironment, + auth_flags, + &auth_ref); + + if (auth_status != errAuthorizationSuccess) { + fprintf(stderr, "%s: AuthorizationCreate() failed.\n", + __func__); + return NULL; + } + + auth_status = AuthorizationExecuteWithPrivileges(auth_ref, + path_buffer, + kAuthorizationFlagDefaults, + args + 1, + &fp); + + if (auth_status != errAuthorizationSuccess) { + fprintf(stderr, "%s: AuthorizationExecWithPrivileges() failed.\n", + __func__); + return NULL; + } + + if(fread(&c, 1, 1, fp) != 1) { + fclose(fp); + return NULL; + } + + return fp; +} diff --git a/BasiliskII/src/SDL/video_sdl2.cpp b/BasiliskII/src/SDL/video_sdl2.cpp index 21f1fecb..85b14e85 100644 --- a/BasiliskII/src/SDL/video_sdl2.cpp +++ b/BasiliskII/src/SDL/video_sdl2.cpp @@ -68,6 +68,9 @@ #define DEBUG 0 #include "debug.h" +#define CODE_INVALID -1 +#define CODE_HOTKEY -2 + // Supported video modes using std::vector; static vector VideoModes; @@ -88,12 +91,12 @@ static int display_type = DISPLAY_WINDOW; // See enum above #endif // Constants -#ifdef WIN32 -const char KEYCODE_FILE_NAME[] = "BasiliskII_keycodes"; -#elif __MACOSX__ -const char KEYCODE_FILE_NAME[] = "BasiliskII_keycodes"; +#if defined(__MACOSX__) || defined(WIN32) +const char KEYCODE_FILE_NAME[] = "keycodes"; +const char KEYCODE_FILE_NAME2[] = "BasiliskII_keycodes"; #else const char KEYCODE_FILE_NAME[] = DATADIR "/keycodes"; +const char KEYCODE_FILE_NAME2[] = DATADIR "/BasiliskII_keycodes"; #endif @@ -760,11 +763,17 @@ static SDL_Surface * init_sdl_video(int width, int height, int bpp, Uint32 flags } if (!sdl_renderer) { + const char *render_driver = PrefsFindString("sdlrender"); + if (render_driver) { + SDL_SetHint(SDL_HINT_RENDER_DRIVER, render_driver); + } + else { #ifdef WIN32 - SDL_SetHint(SDL_HINT_RENDER_DRIVER, "software"); + SDL_SetHint(SDL_HINT_RENDER_DRIVER, "software"); #else - SDL_SetHint(SDL_HINT_RENDER_DRIVER, ""); + SDL_SetHint(SDL_HINT_RENDER_DRIVER, ""); #endif + } sdl_renderer = SDL_CreateRenderer(sdl_window, -1, 0); if (!sdl_renderer) { shutdown_sdl_video(); @@ -1197,7 +1206,8 @@ static void keycode_init(void) const char *kc_path = PrefsFindString("keycodefile"); // Open keycode table - FILE *f = fopen(kc_path ? kc_path : KEYCODE_FILE_NAME, "r"); + FILE *f = fopen(kc_path && *kc_path ? kc_path : KEYCODE_FILE_NAME, "r"); + if (f == NULL) f = fopen(KEYCODE_FILE_NAME2, "r"); if (f == NULL) { char str[256]; snprintf(str, sizeof(str), GetString(STR_KEYCODE_FILE_WARN), kc_path ? kc_path : KEYCODE_FILE_NAME, strerror(errno)); @@ -1207,7 +1217,7 @@ static void keycode_init(void) // Default translation table for (int i=0; i<256; i++) - keycode_table[i] = -1; + keycode_table[i] = CODE_INVALID; // Search for server vendor string, then read keycodes const char * video_driver = SDL_GetCurrentVideoDriver(); @@ -1893,27 +1903,6 @@ void video_set_cursor(void) * Keyboard-related utilify functions */ -static bool is_modifier_key(SDL_KeyboardEvent const & e) -{ - switch (e.keysym.sym) { - case SDLK_NUMLOCKCLEAR: - case SDLK_CAPSLOCK: - case SDLK_SCROLLLOCK: - case SDLK_RSHIFT: - case SDLK_LSHIFT: - case SDLK_RCTRL: - case SDLK_LCTRL: - case SDLK_RALT: - case SDLK_LALT: - case SDLK_RGUI: - case SDLK_LGUI: - case SDLK_MODE: - case SDLK_APPLICATION: - return true; - } - return false; -} - static bool is_hotkey_down(SDL_Keysym const & ks) { int hotkey = PrefsFindInt32("hotkey"); @@ -1925,8 +1914,8 @@ static bool is_hotkey_down(SDL_Keysym const & ks) /* - * Translate key event to Mac keycode, returns -1 if no keycode was found - * and -2 if the key was recognized as a hotkey + * Translate key event to Mac keycode, returns CODE_INVALID if no keycode was found + * and CODE_HOTKEY if the key was recognized as a hotkey */ static int kc_decode(SDL_Keysym const & ks, bool key_down) @@ -1982,8 +1971,8 @@ static int kc_decode(SDL_Keysym const & ks, bool key_down) case SDLK_PERIOD: case SDLK_GREATER: return 0x2f; case SDLK_SLASH: case SDLK_QUESTION: return 0x2c; - case SDLK_TAB: if (is_hotkey_down(ks)) {if (!key_down) drv->suspend(); return -2;} else return 0x30; - case SDLK_RETURN: if (is_hotkey_down(ks)) {if (!key_down) toggle_fullscreen = true; return -2;} else return 0x24; + case SDLK_TAB: if (is_hotkey_down(ks)) {if (!key_down) drv->suspend(); return CODE_HOTKEY;} else return 0x30; + case SDLK_RETURN: if (is_hotkey_down(ks)) {if (!key_down) toggle_fullscreen = true; return CODE_HOTKEY;} else return 0x24; case SDLK_SPACE: return 0x31; case SDLK_BACKSPACE: return 0x33; @@ -2018,9 +2007,9 @@ static int kc_decode(SDL_Keysym const & ks, bool key_down) case SDLK_LEFT: return 0x3b; case SDLK_RIGHT: return 0x3c; - case SDLK_ESCAPE: if (is_hotkey_down(ks)) {if (!key_down) { quit_full_screen = true; emerg_quit = true; } return -2;} else return 0x35; + case SDLK_ESCAPE: if (is_hotkey_down(ks)) {if (!key_down) { quit_full_screen = true; emerg_quit = true; } return CODE_HOTKEY;} else return 0x35; - case SDLK_F1: if (is_hotkey_down(ks)) {if (!key_down) SysMountFirstFloppy(); return -2;} else return 0x7a; + case SDLK_F1: if (is_hotkey_down(ks)) {if (!key_down) SysMountFirstFloppy(); return CODE_HOTKEY;} else return 0x7a; case SDLK_F2: return 0x78; case SDLK_F3: return 0x63; case SDLK_F4: return 0x76; @@ -2056,7 +2045,7 @@ static int kc_decode(SDL_Keysym const & ks, bool key_down) case SDLK_KP_EQUALS: return 0x51; } D(bug("Unhandled SDL keysym: %d\n", ks.sym)); - return -1; + return CODE_INVALID; } static int event2keycode(SDL_KeyboardEvent const &ev, bool key_down) @@ -2209,18 +2198,21 @@ static void handle_events(void) // Keyboard case SDL_KEYDOWN: { - int code = -1; - if (use_keycodes && !is_modifier_key(event.key)) { - if (event2keycode(event.key, true) != -2) // This is called to process the hotkeys - code = keycode_table[event.key.keysym.scancode & 0xff]; - } else + int code = CODE_INVALID; + if (use_keycodes && event2keycode(event.key, true) != CODE_HOTKEY) + code = keycode_table[event.key.keysym.scancode & 0xff]; + if (code == CODE_INVALID) code = event2keycode(event.key, true); if (code >= 0) { if (!emul_suspended) { +#ifdef WIN32 if (code == 0x39) (SDL_GetModState() & KMOD_CAPS ? ADBKeyDown : ADBKeyUp)(code); else ADBKeyDown(code); +#else + ADBKeyDown(code); +#endif if (code == 0x36) ctrl_down = true; #ifdef __APPLE__ @@ -2243,15 +2235,18 @@ static void handle_events(void) break; } case SDL_KEYUP: { - int code = -1; - if (use_keycodes && !is_modifier_key(event.key)) { - if (event2keycode(event.key, false) != -2) // This is called to process the hotkeys - code = keycode_table[event.key.keysym.scancode & 0xff]; - } else + int code = CODE_INVALID; + if (use_keycodes && event2keycode(event.key, false) != CODE_HOTKEY) + code = keycode_table[event.key.keysym.scancode & 0xff]; + if (code == CODE_INVALID) code = event2keycode(event.key, false); if (code >= 0) { +#ifdef WIN32 if (code != 0x39) ADBKeyUp(code); +#else + ADBKeyUp(code); +#endif if (code == 0x36) ctrl_down = false; #ifdef __APPLE__ diff --git a/BasiliskII/src/SDL/xpram_sdl.cpp b/BasiliskII/src/SDL/xpram_sdl.cpp index 4526bae6..c6f55800 100644 --- a/BasiliskII/src/SDL/xpram_sdl.cpp +++ b/BasiliskII/src/SDL/xpram_sdl.cpp @@ -71,7 +71,7 @@ void SaveXPRAM(void) SDL_snprintf(full_path, sizeof(full_path), "%s/%s", dir, XPRAM_FILE_NAME); // Save the XPRAM file - FILE *f = fopen(XPRAM_FILE_NAME, "wb"); + FILE *f = fopen(full_path, "wb"); if (f != NULL) { fwrite(XPRAM, 256, 1, f); fclose(f); diff --git a/BasiliskII/src/Unix/BasiliskII_128x128x32_icon.c b/BasiliskII/src/Unix/BasiliskII_128x128x32_icon.c deleted file mode 100644 index da13849a..00000000 --- a/BasiliskII/src/Unix/BasiliskII_128x128x32_icon.c +++ /dev/null @@ -1,2672 +0,0 @@ -/* GIMP RGBA C-Source image dump (BasiliskII_128x128x32_icon.c) */ - -static const struct { - unsigned int width; - unsigned int height; - unsigned int bytes_per_pixel; /* 2:RGB16, 3:RGB, 4:RGBA */ - unsigned char pixel_data[128 * 128 * 4 + 1]; -} icon_128x128x32 = { - 128, 128, 4, - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\277\277\277\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\274\254P\377\223" - "}\200\377`>\277\377`>\277\377\274\254P\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\337\337\337\30PPP\377\312" - "\312\3121\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\377\337\327\40\377\207n\217\3778\16\357\377L\0\377\377[\0\377\377i\0\377" - "\377c\0\377\3778\16\357\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\342\342\342\11PPP\377PPP\377PPP\377\245\245\245X\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\307\273@\377`>\277\3779\0\377" - "\377f\0\377\377\215\0\377\377\220\0\377\377\210\0\377\377}\0\377\377g\0\377" - "\377E\36\337\0\0\0\0\0\0\0\1\0\0\0\1\0\0\0\1\0\0\0\1\0\0\0\1\0\0\0\1\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\1\\\\\\\242PPP\377PPP\377PPP\377PPP\377jjj\224\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\377\307\273@\377`>\277\377F\0\377\377z\0\377\377\224\0\377\377\223\0\377" - "\377\220\0\377\377\213\0\377\377}\0\377\377S\0\377\377S.\317\371\325\312" - "1\177\177\177\2\177\177\177\2\252\252\252\3\277\277\277\4\277\277\277\4\277" - "\277\277\4\252\252\252\3\177\177\177\2\0\0\0\1\0\0\0\1\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0jjj\224PPP\377PPP\377PPP\377PPP\377" - "PPP\377\312\312\3121\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\377\307\273@\377`>\277\377F\0\377\377z\0\377\377\223" - "\0\377\377\223\0\377\377\221\0\377\377\216\0\377\377}\0\377\377R\0\377\377" - "<\16\357\377\224~\201\252\252\252\3\277\277\277\4\324\324\324\6\337\337\337" - "\10\342\342\342\11\347\347\347\13\347\347\347\13\345\345\345\12\337\337\337" - "\10\314\314\314\5\252\252\252\3\0\0\0\1\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\245\245\245XPPP\377PPP\377PPP\377PPP\377PPP\377\245\245\245" - "X\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\337" - "\327\40\377mN\257\377F\0\377\377z\0\377\377\223\0\377\377\222\0\377\377\220" - "\0\377\377\215\0\377\377r\0\377\377N\0\377\377E\36\337\374\240\213q\361\344" - "\344\23\314\314\314\5\337\337\337\10\347\347\347\13\356\356\356\17\361\361" - "\361\23\350\350\350\27\353\353\353\32\353\353\353\32\361\344\335&\371\203" - "j\227\375R.\321\3778\16\357\375_>\300\377`>\277\377mN\257\377\223}\200\377" - "\223}\200\377\257\234`\342\257\244Z|G<\377|G<\377[NK\377PPP\377PPP\377jj" - "j\224\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377" - "\357\337\20\377\307\273@\377\257\234`\377\223}\200\377`>\277\377y^\237\377" - "\357\337\20\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\377\357\337\20\377\207n\217\3779\0\377\377s\0\377\377" - "\223\0\377\377\222\0\377\377\220\0\377\377\215\0\377\377r\0\377\377B\0\377" - "\377`>\277\374\255\235a\252\252\252\3\324\324\324\6\342\342\342\11\353\353" - "\353\15\361\361\361\23\353\353\353\32\347\347\347!\346\346\346)\344\344\344" - "0\341\341\3414\341\341\3413\361\224\200\211\377T\0\377\377{\0\377\377\213" - "\0\377\377y\0\377\377x\0\377\377r\0\377\377_\0\377\377^\0\377\377Q\0\377" - "\377E\0\377\377E\0\377\377E\0\377\3772\0\377\377,\0\377\377,\0\377\377,\0" - "\377\377,\0\377\377,\0\377\377,\0\377\377,\0\377\377,\0\377\377,\0\377\377" - ",\0\377\377,\0\377\377,\0\377\377,\0\377\377,\0\377\377,\0\377\377,\0\377" - "\377,\0\377\377,\0\377\377,\0\377\377,\0\377\377,\0\377\377,\0\377\377,\0" - "\377\377,\0\377\377,\0\377\377,\0\377\377,\0\377\377,\0\377\377,\0\377\377" - ",\0\377\377,\0\377\377,\0\377\377,\0\377\377,\0\377\377,\0\377\377,\0\377" - "\377,\0\377\377,\0\377\3772\0\377\377A\0\377\377I\0\377\377P\0\377\377_\0" - "\377\377V\0\377\377`>\277\0\0\0\1\0\0\0\1\0\0\0\1\0\0\0\1\0\0\0\1\0\0\0\1" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\377\257\234`\377>\16\357\377f\0\377\377\223\0\377" - "\377\222\0\377\377\220\0\377\377\214\0\377\377|\0\377\377M\0\377\377`>\277" - "\373\310\274A\252\252\252\3\324\324\324\6\342\342\342\11\354\354\354\16\362" - "\362\362\25\355\355\355\35\345\345\345(\341\341\3413\336\336\336?\326\326" - "\326K\324\324\324T\320\320\320X\322\322\322U\365W6\322\377t\0\377\377\222" - "\0\377\377\224\0\377\377\224\0\377\377\224\0\377\377\224\0\377\377\224\0" - "\377\377\224\0\377\377\223\0\377\377\223\0\377\377\223\0\377\377\223\0\377" - "\377\223\0\377\377\223\0\377\377\223\0\377\377\223\0\377\377\223\0\377\377" - "\223\0\377\377\223\0\377\377\223\0\377\377\223\0\377\377\223\0\377\377\223" - "\0\377\377\223\0\377\377\223\0\377\377\223\0\377\377\223\0\377\377\223\0" - "\377\377\223\0\377\377\223\0\377\377\223\0\377\377\223\0\377\377\223\0\377" - "\377\223\0\377\377\223\0\377\377\223\0\377\377\223\0\377\377\223\0\377\377" - "\223\0\377\377\223\0\377\377\223\0\377\377\223\0\377\377\223\0\377\377\223" - "\0\377\377\223\0\377\377\223\0\377\377\223\0\377\377\223\0\377\377\223\0" - "\377\377\223\0\377\377\222\0\377\377\216\0\377\377\205\0\377\377|\0\377\377" - "u\0\377\377q\0\377\377p\0\377\377,\0\377\252\252\252\3\252\252\252\3\277" - "\277\277\4\277\277\277\4\277\277\277\4\252\252\252\3\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\324\311" - "0\377`>\277\377S\0\377\377\215\0\377\377\222\0\377\377\220\0\377\377\214" - "\0\377\377\210\0\377\377]\0\377\377I\35\337\374\255\235a\252\252\252\3\314" - "\314\314\5\342\342\342\11\354\354\354\16\362\362\362\25\356\356\356\37\346" - "\346\346*\337\337\3378\327\327\327G\320\320\320W\312\312\312f\303\303\303" - "s\300\300\300{\277\277\277}\302\302\302v\360S2\330\377w\0\377\377\224\0\377" - "\377\224\0\377\377\224\0\377\377\224\0\377\377\224\0\377\377\224\0\377\377" - "\224\0\377\377\224\0\377\377\224\0\377\377\224\0\377\377\224\0\377\377\224" - "\0\377\377\224\0\377\377\224\0\377\377\224\0\377\377\224\0\377\377\224\0" - "\377\377\224\0\377\377\224\0\377\377\224\0\377\377\224\0\377\377\224\0\377" - "\377\224\0\377\377\224\0\377\377\224\0\377\377\224\0\377\377\224\0\377\377" - "\224\0\377\377\224\0\377\377\224\0\377\377\224\0\377\377\225\0\377\377\224" - "\0\377\377\224\0\377\377\224\0\377\377\224\0\377\377\224\0\377\377\224\0" - "\377\377\224\0\377\377\224\0\377\377\225\0\377\377\224\0\377\377\224\0\377" - "\377\224\0\377\377\224\0\377\377\224\0\377\377\224\0\377\377\224\0\377\377" - "\224\0\377\377\224\0\377\377\221\0\377\377\211\0\377\377~\0\377\377v\0\377" - "\377r\0\377\377[\0\377\374kM\262\342\342\342\11\345\345\345\12\347\347\347" - "\13\347\347\347\13\347\347\347\13\342\342\342\11\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\223}\200\377@\0\377" - "\377z\0\377\377\223\0\377\377\220\0\377\377\215\0\377\377\211\0\377\377y" - "\0\377\377A\0\377\377\207n\217\361\344\344\23\314\314\314\5\337\337\337\10" - "\354\354\354\16\362\362\362\25\356\356\356\37\347\347\347+\340\340\340:\331" - "\331\331J\317\317\317\\\307\307\307n\276\276\276\177\266\266\266\215\261" - "\261\261\230\257\257\257\235\260\260\260\231\267\267\267\214\357Q0\334\377" - "x\0\377\377\224\0\377\377\224\0\377\377\224\0\377\377\224\0\377\377\224\0" - "\377\377\223\0\377\377\224\0\377\377\223\0\377\377\224\0\377\377\224\0\377" - "\377\224\0\377\377\224\0\377\377\224\0\377\377\224\0\377\377\224\0\377\377" - "\224\0\377\377\224\0\377\377\224\0\377\377\224\0\377\377\224\0\377\377\224" - "\0\377\377\224\0\377\377\224\0\377\377\224\0\377\377\224\0\377\377\224\0" - "\377\377\224\0\377\377\224\0\377\377\224\0\377\377\224\0\377\377\224\0\377" - "\377\224\0\377\377\224\0\377\377\224\0\377\377\224\0\377\377\224\0\377\377" - "\224\0\377\377\224\0\377\377\224\0\377\377\224\0\377\377\224\0\377\377\224" - "\0\377\377\224\0\377\377\224\0\377\377\224\0\377\377\224\0\377\377\224\0" - "\377\377\224\0\377\377\223\0\377\377\223\0\377\377\220\0\377\377\207\0\377" - "\377}\0\377\377u\0\377\377r\0\377\377F\0\377\365\246\226n\350\350\350\27" - "\352\352\352\31\353\353\353\32\354\354\354\33\352\352\352\31\363\363\363" - "\26\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\324\3110\377" - "S.\317\377`\0\377\377\223\0\377\377\221\0\377\377\216\0\377\377\211\0\377" - "\377\204\0\377\377e\0\377\377I\35\337\373\310\274A\277\277\277\4\337\337" - "\337\10\351\351\351\14\362\362\362\24\355\355\355\35\346\346\346*\337\337" - "\3379\326\326\326K\316\316\316^\304\304\304q\274\274\274\203\264\264\264" - "\224\254\254\254\241\251\251\251\252\247\247\247\256\247\247\247\254\254" - "\254\254\241\267\267\267\216\357Q0\334\377y\0\377\377\224\0\377\377\224\0" - "\377\377\223\0\377\377\222\0\377\377\221\0\377\377\220\0\377\377\220\0\377" - "\377\220\0\377\377\221\0\377\377\221\0\377\377\221\0\377\377\221\0\377\377" - "\221\0\377\377\221\0\377\377\221\0\377\377\221\0\377\377\221\0\377\377\221" - "\0\377\377\221\0\377\377\221\0\377\377\221\0\377\377\221\0\377\377\221\0" - "\377\377\221\0\377\377\221\0\377\377\221\0\377\377\221\0\377\377\221\0\377" - "\377\221\0\377\377\221\0\377\377\221\0\377\377\221\0\377\377\221\0\377\377" - "\221\0\377\377\221\0\377\377\221\0\377\377\221\0\377\377\221\0\377\377\221" - "\0\377\377\221\0\377\377\221\0\377\377\221\0\377\377\221\0\377\377\221\0" - "\377\377\221\0\377\377\221\0\377\377\221\0\377\377\221\0\377\377\220\0\377" - "\377\217\0\377\377\212\0\377\377\202\0\377\377z\0\377\377t\0\377\377q\0\377" - "\3770\0\377\345\330\330<\344\344\3441\341\341\3414\342\342\3426\336\336\336" - "7\341\341\3414\347\347\347,\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\377\223}\200\377@\0\377\377\200\0\377\377\223\0\377\377\220\0\377\377" - "\214\0\377\377\206\0\377\377\201\0\377\377T\0\377\377lO\260\361\344\344\23" - "\324\324\324\6\347\347\347\13\360\360\360\22\354\354\354\33\345\345\345(" - "\336\336\3367\330\330\330I\315\315\315]\304\304\304q\273\273\273\204\262" - "\262\262\226\254\254\254\244\246\246\246\257\244\244\244\264\244\244\244" - "\264\246\246\246\257\254\254\254\244\264\264\264\223\277\277\277|\361T3\327" - "\377y\0\377\377\224\0\377\377\224\0\377\377\223\0\377\377\220\0\377\377\214" - "\0\377\377\211\0\377\377\210\0\377\377\210\0\377\377\211\0\377\377\211\0" - "\377\377\211\0\377\377\212\0\377\377\212\0\377\377\212\0\377\377\212\0\377" - "\377\212\0\377\377\212\0\377\377\212\0\377\377\211\0\377\377\212\0\377\377" - "\212\0\377\377\212\0\377\377\212\0\377\377\212\0\377\377\212\0\377\377\211" - "\0\377\377\212\0\377\377\211\0\377\377\212\0\377\377\212\0\377\377\212\0" - "\377\377\212\0\377\377\212\0\377\377\212\0\377\377\212\0\377\377\212\0\377" - "\377\212\0\377\377\212\0\377\377\212\0\377\377\212\0\377\377\212\0\377\377" - "\212\0\377\377\212\0\377\377\211\0\377\377\212\0\377\377\211\0\377\377\211" - "\0\377\377\211\0\377\377\210\0\377\377\206\0\377\377\201\0\377\377{\0\377" - "\377v\0\377\377r\0\377\377V\0\377\356jN\277\322\322\322V\321\321\321Y\317" - "\317\317\\\316\316\316_\316\316\316^\320\320\320X\326\326\326K\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\377\337\327\40\377`>\277\377`\0\377\377\224\0\377" - "\377\222\0\377\377\217\0\377\377\212\0\377\377\203\0\377\377x\0\377\377I" - "\0\377\375\222|\201\314\314\314\5\342\342\342\11\356\356\356\17\351\351\351" - "\30\351\351\351$\341\341\3413\332\332\332E\321\321\321Z\305\305\305o\273" - "\273\273\204\262\262\262\226\253\253\253\245\246\246\246\260\243\243\243" - "\265\243\243\243\266\245\245\245\261\251\251\251\247\260\260\260\231\271" - "\271\271\210\303\303\303t\315\315\315]\365W6\321\377y\0\377\377\224\0\377" - "\377\224\0\377\377\222\0\377\377\215\0\377\377\206\0\377\377\201\0\377\377" - "~\0\377\377~\0\377\377~\0\377\377\177\0\377\377\177\0\377\377\177\0\377\377" - "\177\0\377\377\177\0\377\377\177\0\377\377\177\0\377\377\177\0\377\377\177" - "\0\377\377\177\0\377\377\177\0\377\377\177\0\377\377\177\0\377\377\177\0" - "\377\377\177\0\377\377\177\0\377\377\177\0\377\377\177\0\377\377\177\0\377" - "\377\177\0\377\377\177\0\377\377\177\0\377\377\177\0\377\377\177\0\377\377" - "\177\0\377\377\177\0\377\377\177\0\377\377\177\0\377\377\177\0\377\377\177" - "\0\377\377\177\0\377\377\177\0\377\377\177\0\377\377\177\0\377\377\177\0" - "\377\377\177\0\377\377\177\0\377\377\177\0\377\377\177\0\377\377~\0\377\377" - "|\0\377\377y\0\377\377u\0\377\377r\0\377\377p\0\377\377=\0\377\315\230\214" - "\241\273\273\273\204\273\273\273\207\267\267\267\213\266\266\266\215\270" - "\270\270\212\275\275\275\200\310\310\310l\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\274" - "\254P\377D\15\357\377z\0\377\377\224\0\377\377\222\0\377\377\216\0\377\377" - "\211\0\377\377\202\0\377\377v\0\377\377D\14\357\374\253\234b\332\332\332" - "\7\351\351\351\14\362\362\362\25\347\347\347\40\343\343\343.\333\333\333" - "@\322\322\322U\310\310\310k\275\275\275\201\263\263\263\225\253\253\253\245" - "\245\245\245\261\243\243\243\266\243\243\243\266\245\245\245\261\251\251" - "\251\247\260\260\260\231\271\271\271\210\302\302\302v\313\313\313c\325\325" - "\325P\335\335\335=\370Z8\312\377y\0\377\377\224\0\377\377\224\0\377\377\222" - "\0\377\377\213\0\377\377\202\0\377\377{\0\377\377v\0\377\377u\0\377\377v" - "\0\377\377v\0\377\377v\0\377\377v\0\377\377v\0\377\377w\0\377\377w\0\377" - "\377v\0\377\377v\0\377\377v\0\377\377w\0\377\377v\0\377\377w\0\377\377v\0" - "\377\377w\0\377\377v\0\377\377w\0\377\377v\0\377\377v\0\377\377v\0\377\377" - "v\0\377\377w\0\377\377v\0\377\377w\0\377\377w\0\377\377w\0\377\377v\0\377" - "\377v\0\377\377v\0\377\377v\0\377\377v\0\377\377v\0\377\377w\0\377\377w\0" - "\377\377w\0\377\377v\0\377\377v\0\377\377w\0\377\377v\0\377\377v\0\377\377" - "u\0\377\377u\0\377\377s\0\377\377r\0\377\377p\0\377\377g\0\377\363;\24\365" - "\246\246\246\257\245\245\245\261\244\244\244\264\241\241\241\267\241\241" - "\241\267\244\244\244\262\254\254\254\243\270\270\270\211\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\316\316" - "\316\377\316\316\316\377\316\316\316\377\316\316\316\377\316\316\316\377" - "\316\316\316\377\316\316\316\377\316\316\316\377\316\316\316\377\316\316" - "\316\377\316\316\316\377\316\316\316\377\316\316\316\377\316\316\316\377" - "\316\316\316\377\316\316\316\377\316\316\316\377\316\316\316\377\316\316" - "\316\377\352s[\377\377M\0\377\377\215\0\377\377\224\0\377\377\222\0\377\377" - "\216\0\377\377\207\0\377\377\200\0\377\377u\0\377\375B\12\377\325\256\246" - "\377\312\312\312\377\307\307\307\377\304\304\304\377\276\276\276\377\267" - "\267\267\377\256\256\256\377\246\246\246\377\234\234\234\377\224\224\224" - "\377\214\214\214\377\206\206\206\377\203\203\203\377\203\203\203\377\206" - "\206\206\377\212\212\212\377\220\220\220\377\227\227\227\377\240\240\240" - "\377\246\246\246\377\256\256\256\377\265\265\265\377\273\273\273\377\300" - "\300\300\377\342xa\377\377`\0\377\377\224\0\377\377\224\0\377\377\221\0\377" - "\377\212\0\377\377\200\0\377\377x\0\377\377s\0\377\377r\0\377\377q\0\377" - "\377r\0\377\377r\0\377\377r\0\377\377q\0\377\377r\0\377\377r\0\377\377r\0" - "\377\377r\0\377\377r\0\377\377r\0\377\377r\0\377\377r\0\377\377r\0\377\377" - "r\0\377\377r\0\377\377r\0\377\377r\0\377\377r\0\377\377r\0\377\377r\0\377" - "\377r\0\377\377r\0\377\377r\0\377\377q\0\377\377r\0\377\377r\0\377\377r\0" - "\377\377r\0\377\377r\0\377\377r\0\377\377r\0\377\377r\0\377\377q\0\377\377" - "r\0\377\377r\0\377\377r\0\377\377r\0\377\377r\0\377\377q\0\377\377q\0\377" - "\377q\0\377\377p\0\377\377p\0\377\377p\0\377\377N\0\377\311_I\351\223\223" - "\223\324\223\223\223\325\221\221\221\327\222\222\222\330\223\223\223\326" - "\227\227\227\315\241\241\241\272\261\261\261\232\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\316\316\316\377" - "\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241" - "\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377" - "\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241" - "\241\377\241\241\241\377\241\241\241\377\247\232\227\377\347I(\377\377g\0" - "\377\377\224\0\377\377\224\0\377\377\222\0\377\377\215\0\377\377\207\0\377" - "\377\177\0\377\377k\0\377\372;\11\377\260\211\200\377\235\235\235\377\232" - "\232\232\377\226\226\226\377\221\221\221\377\213\213\213\377\204\204\204" - "\377|||\377uuu\377nnn\377iii\377fff\377eee\377fff\377jjj\377ooo\377uuu\377" - "|||\377\202\202\202\377\210\210\210\377\216\216\216\377\222\222\222\377\226" - "\226\226\377\231\231\231\377\234\234\234\377\317eO\377\377`\0\377\377\224" - "\0\377\377\224\0\377\377\221\0\377\377\212\0\377\377\200\0\377\377w\0\377" - "\377r\0\377\377p\0\377\377p\0\377\377p\0\377\377p\0\377\377p\0\377\377p\0" - "\377\377p\0\377\377p\0\377\377p\0\377\377p\0\377\377p\0\377\377p\0\377\377" - "p\0\377\377p\0\377\377p\0\377\377p\0\377\377p\0\377\377p\0\377\377p\0\377" - "\377p\0\377\377p\0\377\377p\0\377\377p\0\377\377p\0\377\377p\0\377\377p\0" - "\377\377p\0\377\377p\0\377\377p\0\377\377p\0\377\377p\0\377\377p\0\377\377" - "p\0\377\377p\0\377\377p\0\377\377p\0\377\377p\0\377\377p\0\377\377p\0\377" - "\377p\0\377\377p\0\377\377p\0\377\377p\0\377\377o\0\377\377o\0\377\377o\0" - "\377\3770\0\377\217\202\177\354\210\210\210\353\210\210\210\354\207\207\207" - "\355\210\210\210\354\211\211\211\347\221\221\221\332\235\235\235\302\257" - "\257\257\236\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\316\316\316\377\241\241\241\377\241\241\241\377\241" - "\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241" - "\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241" - "\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\263\213\203" - "\377\364A\23\377\377z\0\377\377\224\0\377\377\224\0\377\377\222\0\377\377" - "\215\0\377\377\206\0\377\377~\0\377\377j\0\377\356E\34\377\252\220\212\377" - "\234\234\234\377\230\230\230\377\224\224\224\377\216\216\216\377\207\207" - "\207\377\200\200\200\377www\377ppp\377jjj\377fff\377ddd\377ddd\377hhh\377" - "lll\377rrr\377zzz\377\201\201\201\377\210\210\210\377\215\215\215\377\222" - "\222\222\377\227\227\227\377\231\231\231\377\234\234\234\377\236\236\236" - "\377\236\236\236\377\312mZ\377\377Y\0\377\377\224\0\377\377\224\0\377\377" - "\221\0\377\377\211\0\377\377\177\0\377\377w\0\377\377r\0\377\377p\0\377\377" - "o\0\377\377o\0\377\377o\0\377\377o\0\377\377o\0\377\377o\0\377\377o\0\377" - "\377o\0\377\377o\0\377\377o\0\377\377o\0\377\377o\0\377\377o\0\377\377o\0" - "\377\377o\0\377\377o\0\377\377o\0\377\377o\0\377\377o\0\377\377o\0\377\377" - "o\0\377\377o\0\377\377o\0\377\377o\0\377\377o\0\377\377o\0\377\377o\0\377" - "\377o\0\377\377o\0\377\377o\0\377\377o\0\377\377o\0\377\377o\0\377\377o\0" - "\377\377p\0\377\377p\0\377\377p\0\377\377p\0\377\377p\0\377\377p\0\377\377" - "p\0\377\377o\0\377\377o\0\377\377o\0\377\377V\0\377\317K0\374\202\202\202" - "\367\202\202\202\367\202\202\202\367\202\202\202\367\204\204\204\364\207" - "\207\207\355\220\220\220\334\236\236\236\300\261\261\261\230\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\316" - "\316\316\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241" - "\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241" - "\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241" - "\377\241\241\241\377\276|n\377\372E\10\377\377\207\0\377\377\224\0\377\377" - "\223\0\377\377\221\0\377\377\214\0\377\377\205\0\377\377~\0\377\377n\0\377" - "\364>\23\377\243\226\223\377\233\233\233\377\227\227\227\377\221\221\221" - "\377\213\213\213\377\203\203\203\377{{{\377sss\377lll\377fff\377ccc\377b" - "bb\377ddd\377hhh\377nnn\377vvv\377~~~\377\206\206\206\377\214\214\214\377" - "\222\222\222\377\226\226\226\377\231\231\231\377\234\234\234\377\236\236" - "\236\377\237\237\237\377\240\240\240\377\240\240\240\377\270\203x\377\377" - "F\0\377\377\224\0\377\377\224\0\377\377\221\0\377\377\211\0\377\377\177\0" - "\377\377v\0\377\377r\0\377\377p\0\377\377o\0\377\377o\0\377\377o\0\377\377" - "o\0\377\377o\0\377\377o\0\377\377o\0\377\377o\0\377\377o\0\377\377o\0\377" - "\377o\0\377\377o\0\377\377o\0\377\377o\0\377\377o\0\377\377o\0\377\377o\0" - "\377\377o\0\377\377o\0\377\377o\0\377\377o\0\377\377o\0\377\377o\0\377\377" - "o\0\377\377o\0\377\377o\0\377\377o\0\377\377o\0\377\377o\0\377\377o\0\377" - "\377o\0\377\377o\0\377\377o\0\377\377p\0\377\377q\0\377\377r\0\377\377s\0" - "\377\377s\0\377\377r\0\377\377q\0\377\377p\0\377\377p\0\377\377o\0\377\377" - "o\0\377\377=\0\377\237j_\376~~~\375~~~\375\200\200\200\374\200\200\200\373" - "\203\203\203\366\210\210\210\353\221\221\221\327\243\243\243\266\267\267" - "\267\214\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\316\316\316\377\241\241\241\377\241\241\241\377\241\241" - "\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377" - "\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241" - "\241\377\241\241\241\377\304ud\377\377M\0\377\377\215\0\377\377\223\0\377" - "\377\221\0\377\377\216\0\377\377\211\0\377\377\203\0\377\377|\0\377\377r" - "\0\377\372?\10\377\257\210\177\377\231\231\231\377\224\224\224\377\217\217" - "\217\377\210\210\210\377\200\200\200\377www\377ooo\377hhh\377ccc\377aaa\377" - "aaa\377ddd\377iii\377qqq\377yyy\377\201\201\201\377\211\211\211\377\220\220" - "\220\377\225\225\225\377\231\231\231\377\234\234\234\377\236\236\236\377" - "\237\237\237\377\240\240\240\377\240\240\240\377\240\240\240\377\240\240" - "\240\377\255\222\215\377\3779\0\377\377\224\0\377\377\224\0\377\377\221\0" - "\377\377\211\0\377\377~\0\377\377v\0\377\377q\0\377\377p\0\377\377o\0\377" - "\377o\0\377\377o\0\377\377o\0\377\377o\0\377\377o\0\377\377o\0\377\377o\0" - "\377\377o\0\377\377o\0\377\377o\0\377\377o\0\377\377o\0\377\377o\0\377\377" - "o\0\377\377o\0\377\377o\0\377\377o\0\377\377o\0\377\377o\0\377\377o\0\377" - "\377o\0\377\377o\0\377\377o\0\377\377o\0\377\377o\0\377\377o\0\377\377o\0" - "\377\377o\0\377\377o\0\377\377o\0\377\377o\0\377\377o\0\377\377o\0\377\377" - "o\0\377\377o\0\377\377o\0\377\377o\0\377\377o\0\377\377o\0\377\377o\0\377" - "\377o\0\377\377o\0\377\377g\0\377\3577\20\377\177\177\177\377\177\177\177" - "\377\177\177\177\376~~~\375\200\200\200\373\204\204\204\364\213\213\213\346" - "\227\227\227\315\252\252\252\250\277\277\277}\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\316\316\316\377\241" - "\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241" - "\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241" - "\241\241\377\241\241\241\377\241\241\241\377\320fP\377\377S\0\377\377\224" - "\0\377\377\222\0\377\377\217\0\377\377\212\0\377\377\205\0\377\377\177\0" - "\377\377z\0\377\377p\0\377\372?\10\377\256\206~\377\230\230\230\377\222\222" - "\222\377\214\214\214\377\205\205\205\377|||\377sss\377kkk\377eee\377aaa\377" - "___\377aaa\377ddd\377kkk\377sss\377|||\377\205\205\205\377\214\214\214\377" - "\222\222\222\377\230\230\230\377\233\233\233\377\235\235\235\377\237\237" - "\237\377\240\240\240\377\240\240\240\377\240\240\240\377\240\240\240\377" - "\241\241\241\377\241\241\241\377\241\241\241\377\365/\6\377\377\215\0\377" - "\377\223\0\377\377\217\0\377\377\207\0\377\377}\0\377\377u\0\377\377q\0\377" - "\377p\0\377\377o\0\377\377o\0\377\377o\0\377\377o\0\377\377o\0\377\377o\0" - "\377\377o\0\377\377o\0\377\377o\0\377\377o\0\377\377o\0\377\377o\0\377\377" - "o\0\377\377o\0\377\377o\0\377\377o\0\377\377o\0\377\377o\0\377\377o\0\377" - "\377o\0\377\377o\0\377\377o\0\377\377o\0\377\377o\0\377\377o\0\377\377o\0" - "\377\377o\0\377\377o\0\377\377o\0\377\377o\0\377\377o\0\377\377o\0\377\377" - "o\0\377\377o\0\377\377o\0\377\377o\0\377\377o\0\377\377o\0\377\377o\0\377" - "\377o\0\377\377o\0\377\377o\0\377\377o\0\377\377I\0\377\267ZG\377\177\177" - "\177\377\177\177\177\377\177\177\177\377~~~\375\201\201\201\371\206\206\206" - "\360\217\217\217\336\236\236\236\300\261\261\261\230\310\310\310l\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\316\316\316\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241" - "\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377" - "\241\241\241\377\241\241\241\377\241\241\241\377\334X=\377\377`\0\377\377" - "\224\0\377\377\222\0\377\377\216\0\377\377\210\0\377\377\202\0\377\377|\0" - "\377\377w\0\377\377t\0\377\3779\0\377\256\206~\377\226\226\226\377\221\221" - "\221\377\212\212\212\377\201\201\201\377yyy\377ppp\377hhh\377bbb\377___\377" - "^^^\377```\377eee\377lll\377uuu\377~~~\377\207\207\207\377\217\217\217\377" - "\225\225\225\377\231\231\231\377\235\235\235\377\236\236\236\377\240\240" - "\240\377\240\240\240\377\240\240\240\377\241\241\241\377\241\241\241\377" - "\241\241\241\377\241\241\241\377\241\241\241\377\206\206\206\377\3107\31" - "\377\377s\0\377\377\223\0\377\377|\0\377\377n\0\377\377T\0\377\377P\0\377" - "\377F\0\377\377=\0\377\377=\0\377\377=\0\377\3779\0\377\377,\0\377\377,\0" - "\377\377,\0\377\377,\0\377\377,\0\377\377,\0\377\377,\0\377\377,\0\377\377" - ",\0\377\377,\0\377\377,\0\377\377,\0\377\377,\0\377\377,\0\377\377,\0\377" - "\377,\0\377\377,\0\377\377,\0\377\377,\0\377\377,\0\377\377,\0\377\377,\0" - "\377\377,\0\377\377,\0\377\377,\0\377\377,\0\377\377,\0\377\377,\0\377\377" - ",\0\377\377,\0\377\377,\0\377\3770\0\377\377A\0\377\377k\0\377\377o\0\377" - "\377o\0\377\377o\0\377\377o\0\377\377o\0\377\377k\0\377\3674\7\377\205xu" - "\377\177\177\177\377\177\177\177\377\177\177\177\376\200\200\200\374\203" - "\203\203\366\211\211\211\352\224\224\224\323\245\245\245\261\273\273\273" - "\207\317\317\317[\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\316\316\316\377\241\241\241\377\241\241\241\377" - "\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241" - "\241\377\241\241\241\377\241\241\241\377\241\241\241\377\334X=\377\377m\0" - "\377\377\224\0\377\377\222\0\377\377\216\0\377\377\207\0\377\377\200\0\377" - "\377z\0\377\377v\0\377\377s\0\377\377F\0\377\300q`\377\225\225\225\377\217" - "\217\217\377\207\207\207\377~~~\377uuu\377mmm\377eee\377```\377]]]\377]]" - "]\377```\377eee\377mmm\377www\377\200\200\200\377\211\211\211\377\221\221" - "\221\377\226\226\226\377\233\233\233\377\235\235\235\377\237\237\237\377" - "\240\240\240\377\240\240\240\377\240\240\240\377\241\241\241\377\241\241" - "\241\377\241\241\241\377\241\241\241\377\241\241\241\377\223\223\223\377" - "PPP\377\222B2\377\377?\0\377\377,\0\377\3352\16\377\3246\25\377\331oY\377" - "\325kU\377\276n^\377\244od\377\233f[\377\230cX\377\215e]\377rrr\377rrr\377" - "rrr\377rrr\377rrr\377rrr\377rrr\377rrr\377rrr\377rrr\377rrr\377rrr\377rr" - "r\377rrr\377rrr\377rrr\377rrr\377rrr\377rrr\377rrr\377rrr\377rrr\377rrr\377" - "rrr\377rrr\377rrr\377rrr\377rrr\377rrr\377rrr\377rrr\377{nk\377\236\\N\377" - "\371D\5\377\377k\0\377\377o\0\377\377o\0\377\377o\0\377\377o\0\377\377V\0" - "\377\312F+\377}}}\377\177\177\177\377\177\177\177\377\177\177\177\376\201" - "\201\201\372\205\205\205\362\215\215\215\342\231\231\231\307\254\254\254" - "\241\301\301\301u\326\326\326K\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\316\316\316\377\241\241\241\377\241" - "\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241" - "\377\241\241\241\377\241\241\241\377\241\241\241\377\334X=\377\377m\0\377" - "\377\224\0\377\377\222\0\377\377\216\0\377\377\207\0\377\377\177\0\377\377" - "y\0\377\377t\0\377\377q\0\377\377R\0\377\322\\C\377\224\224\224\377\215\215" - "\215\377\205\205\205\377|||\377rrr\377jjj\377ccc\377^^^\377\\\\\\\377\\\\" - "\\\377___\377fff\377nnn\377www\377\201\201\201\377\212\212\212\377\222\222" - "\222\377\230\230\230\377\233\233\233\377\236\236\236\377\237\237\237\377" - "\240\240\240\377\240\240\240\377\241\241\241\377\241\241\241\377\241\241" - "\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377" - "kkk\377PPP\377[NK\377qIA\377OOO\377MMM\377\240\240\240\377\301\301\301\377" - "\255\255\255\377\230\230\230\377\207\207\207\377|||\377vvv\377sss\377rrr" - "\377rrr\377rrr\377rrr\377rrr\377rrr\377rrr\377rrr\377rrr\377rrr\377rrr\377" - "rrr\377rrr\377rrr\377rrr\377rrr\377rrr\377rrr\377rrr\377rrr\377rrr\377rr" - "r\377rrr\377rrr\377rrr\377rrr\377rrr\377rrr\377rrr\377rrr\377rrr\377rrr\377" - "rrr\377\334>\35\377\377^\0\377\377o\0\377\377o\0\377\377o\0\377\377o\0\377" - "\3774\0\377\204id\377}}}\377\177\177\177\377\177\177\177\376~~~\375\202\202" - "\202\370\207\207\207\355\221\221\221\331\241\241\241\271\265\265\265\217" - "\313\313\313c\335\335\335<\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\316\316\316\377\241\241\241\377\241\241" - "\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377" - "\241\241\241\377\241\241\241\377\326_G\377\377f\0\377\377\224\0\377\377\223" - "\0\377\377\217\0\377\377\210\0\377\377\200\0\377\377y\0\377\377t\0\377\377" - "q\0\377\377_\0\377\345G&\377\223\223\223\377\214\214\214\377\203\203\203" - "\377yyy\377ppp\377hhh\377aaa\377\\\\\\\377ZZZ\377[[[\377___\377eee\377nn" - "n\377xxx\377\202\202\202\377\214\214\214\377\223\223\223\377\230\230\230" - "\377\234\234\234\377\236\236\236\377\240\240\240\377\240\240\240\377\240" - "\240\240\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241" - "\377\241\241\241\377\241\241\241\377\241\241\241\377\223\223\223\377PPP\377" - "PPP\377PPP\377PPP\377OOO\377ggg\377\323\323\323\377\303\303\303\377\257\257" - "\257\377\234\234\234\377\212\212\212\377~~~\377xxx\377ttt\377ttt\377sss\377" - "ttt\377ttt\377ttt\377ttt\377uuu\377uuu\377uuu\377uuu\377uuu\377uuu\377uu" - "u\377uuu\377uuu\377uuu\377uuu\377uuu\377uuu\377uuu\377uuu\377uuu\377uuu\377" - "uuu\377uuu\377uuu\377uuu\377uuu\377uuu\377uuu\377uuu\377uuu\377uuu\377\377" - ",\0\377\377o\0\377\377o\0\377\377o\0\377\377o\0\377\377^\0\377\334>\35\377" - "sss\377~~~\377\177\177\177\376\177\177\177\376\200\200\200\373\204\204\204" - "\364\213\213\213\346\227\227\227\315\250\250\250\251\277\277\277}\323\323" - "\323R\343\343\343/\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\316\316\316\377\241\241\241\377\241\241\241\377" - "\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241" - "\241\377\304ud\377\377S\0\377\377\224\0\377\377\223\0\377\377\220\0\377\377" - "\211\0\377\377\201\0\377\377y\0\377\377t\0\377\377q\0\377\377l\0\377\371" - "7\11\377\231\214\211\377\212\212\212\377\201\201\201\377www\377nnn\377ff" - "f\377___\377[[[\377YYY\377ZZZ\377^^^\377eee\377nnn\377yyy\377\203\203\203" - "\377\214\214\214\377\224\224\224\377\231\231\231\377\235\235\235\377\236" - "\236\236\377\240\240\240\377\240\240\240\377\240\240\240\377\241\241\241" - "\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241" - "\241\241\377\241\241\241\377\241\241\241\377kkk\377PPP\377PPP\377PPP\377" - "PPP\377OOO\377\266\266\266\377\325\325\325\377\306\306\306\377\263\263\263" - "\377\237\237\237\377\215\215\215\377\202\202\202\377zzz\377xxx\377www\377" - "xxx\377xxx\377yyy\377yyy\377zzz\377zzz\377zzz\377zzz\377zzz\377zzz\377zz" - "z\377zzz\377zzz\377zzz\377zzz\377zzz\377zzz\377zzz\377zzz\377zzz\377zzz\377" - "zzz\377zzz\377zzz\377zzz\377zzz\377zzz\377zzz\377zzz\377zzz\377zzz\377\223" - "kc\377\3779\0\377\377o\0\377\377o\0\377\377o\0\377\377o\0\377\377E\0\377" - "\252[J\377uuu\377\177\177\177\377\200\200\200\374\200\200\200\374\201\201" - "\201\371\206\206\206\360\217\217\217\335\236\236\236\277\261\261\261\230" - "\310\310\310k\334\334\334C\351\351\351$\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\316\316\316\377\241\241\241" - "\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241" - "\241\241\377\304ud\377\377S\0\377\377\224\0\377\377\223\0\377\377\221\0\377" - "\377\212\0\377\377\203\0\377\377z\0\377\377u\0\377\377r\0\377\377p\0\377" - "\377=\0\377\255xm\377\211\211\211\377\200\200\200\377vvv\377lll\377ddd\377" - "]]]\377ZZZ\377XXX\377YYY\377]]]\377ddd\377mmm\377xxx\377\203\203\203\377" - "\214\214\214\377\224\224\224\377\231\231\231\377\235\235\235\377\237\237" - "\237\377\240\240\240\377\240\240\240\377\241\241\241\377\241\241\241\377" - "\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241" - "\241\377\241\241\241\377\241\241\241\377\223\223\223\377PPP\377PPP\377PP" - "P\377PPP\377PPP\377\205\205\205\377\337\337\337\377\327\327\327\377\312\312" - "\312\377\270\270\270\377\245\245\245\377\224\224\224\377\210\210\210\377" - "\202\202\202\377\177\177\177\377\177\177\177\377\177\177\177\377\200\200" - "\200\377\201\201\201\377\202\202\202\377\203\203\203\377\203\203\203\377" - "\204\204\204\377\205\205\205\377\205\205\205\377\205\205\205\377\205\205" - "\205\377\205\205\205\377\205\205\205\377\205\205\205\377\205\205\205\377" - "\205\205\205\377\205\205\205\377\205\205\205\377\205\205\205\377\205\205" - "\205\377\205\205\205\377\205\205\205\377\205\205\205\377\205\205\205\377" - "\205\205\205\377\205\205\205\377\205\205\205\377\205\205\205\377\205\205" - "\205\377\205\205\205\377\205\205\205\377\273^K\377\377I\0\377\377o\0\377" - "\377o\0\377\377o\0\377\377g\0\377\3577\20\377}}}\377zzz\377\202\202\202\377" - "\201\201\201\371\201\201\201\372\203\203\203\365\211\211\211\351\225\225" - "\225\322\246\246\246\260\273\273\273\205\321\321\321Z\342\342\3425\354\354" - "\354\33\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\316\316\316\377\241\241\241\377\241\241\241\377\241\241\241" - "\377\241\241\241\377\241\241\241\377\263\213\203\377\372E\10\377\377\215" - "\0\377\377\224\0\377\377\221\0\377\377\214\0\377\377\204\0\377\377|\0\377" - "\377u\0\377\377r\0\377\377p\0\377\377N\0\377\310^H\377\210\210\210\377~~" - "~\377ttt\377kkk\377bbb\377\\\\\\\377XXX\377WWW\377XXX\377\\\\\\\377ccc\377" - "mmm\377www\377\202\202\202\377\214\214\214\377\224\224\224\377\231\231\231" - "\377\235\235\235\377\237\237\237\377\240\240\240\377\240\240\240\377\241" - "\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241" - "\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241" - "\241\241\377kkk\377PPP\377PPP\377PPP\377PPP\377PPP\377\273\273\273\377\340" - "\340\340\377\331\331\331\377\316\316\316\377\276\276\276\377\255\255\255" - "\377\236\236\236\377\223\223\223\377\215\215\215\377\213\213\213\377\213" - "\213\213\377\215\215\215\377\216\216\216\377\220\220\220\377\221\221\221" - "\377\223\223\223\377\224\224\224\377\224\224\224\377\225\225\225\377\226" - "\226\226\377\226\226\226\377\226\226\226\377\226\226\226\377\226\226\226" - "\377\226\226\226\377\226\226\226\377\226\226\226\377\226\226\226\377\226" - "\226\226\377\226\226\226\377\226\226\226\377\226\226\226\377\226\226\226" - "\377\226\226\226\377\226\226\226\377\226\226\226\377\226\226\226\377\226" - "\226\226\377\226\226\226\377\226\226\226\377\226\226\226\377\226\226\226" - "\377\353@\34\377\377b\0\377\377o\0\377\377o\0\377\377o\0\377\377N\0\377\306" - "\\F\377\206\206\206\377\200\200\200\377\207\207\207\377\204\204\204\364\203" - "\203\203\366\206\206\206\360\215\215\215\341\233\233\233\305\256\256\256" - "\237\303\303\303s\331\331\331J\346\346\346)\361\361\361\23\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\316\316" - "\316\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377" - "\247\232\227\377\3719\11\377\377\215\0\377\377\224\0\377\377\222\0\377\377" - "\215\0\377\377\206\0\377\377}\0\377\377w\0\377\377r\0\377\377p\0\377\377" - "b\0\377\352?\33\377\207\207\207\377~~~\377ttt\377iii\377aaa\377\\\\\\\377" - "XXX\377VVV\377:::\377<<<\377AAA\377GGG\377NNN\377VVV\377\214\214\214\377" - "\224\224\224\377\231\231\231\377\235\235\235\377\237\237\237\377\240\240" - "\240\377\240\240\240\377\241\241\241\377\241\241\241\377\241\241\241\377" - "\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241" - "\241\377\241\241\241\377\241\241\241\377\223\223\223\377PPP\377PPP\377PP" - "P\377PPP\377PPP\377\205\205\205\377\343\343\343\377\340\340\340\377\334\334" - "\334\377\323\323\323\377\306\306\306\377\271\271\271\377\254\254\254\377" - "\243\243\243\377\236\236\236\377\235\235\235\377\237\237\237\377\240\240" - "\240\377\242\242\242\377\244\244\244\377\245\245\245\377\246\246\246\377" - ";;;\377;;;\377<<<\377<<<\377<<<\377<<<\377\253\253\253\377\253\253\253\377" - "\253\253\253\377\253\253\253\377\253\253\253\377\253\253\253\377\253\253" - "\253\377\253\253\253\377\253\253\253\377\253\253\253\377\253\253\253\377" - "\253\253\253\377\253\253\253\377\253\253\253\377\253\253\253\377\253\253" - "\253\377\253\253\253\377\253\253\253\377\253\253\253\377\273\223\213\377" - "\3779\0\377\377o\0\377\377o\0\377\377o\0\377\377o\0\377\3774\0\377\250\216" - "\210\377\223\223\223\377\210\210\210\377\214\214\214\377\207\207\207\356" - "\205\205\205\361\211\211\211\352\223\223\223\326\243\243\243\266\266\266" - "\266\215\315\315\315a\340\340\340;\356\356\356\36\354\354\354\16\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\316\316\316\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241" - "\241\377\347I(\377\377z\0\377\377\224\0\377\377\222\0\377\377\216\0\377\377" - "\210\0\377\377\177\0\377\377x\0\377\377s\0\377\377p\0\377\377o\0\377\377" - "9\0\377\236vn\377}}}\377rrr\377iii\377aaa\377[[[\377WWW\377UUU\377VVV\377" - "<<<\377@@@\377FFF\377NNN\377UUU\377\\\\\\\377\223\223\223\377\231\231\231" - "\377\235\235\235\377\237\237\237\377\240\240\240\377\240\240\240\377\241" - "\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241" - "\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241" - "\241\241\377\241\241\241\377\206\206\206\377PPP\377PPP\377PPP\377PPP\377" - "PPP\377\274\274\274\377\343\343\343\377\341\341\341\377\337\337\337\377\330" - "\330\330\377\317\317\317\377\305\305\305\377\274\274\274\377\266\266\266" - "\377\263\263\263\377\263\263\263\377\264\264\264\377\266\266\266\377\267" - "\267\267\377\271\271\271\377\272\272\272\377\273\273\273\377BBB\377CCC\377" - "CCC\377CCC\377CCC\377CCC\377\277\277\277\377\277\277\277\377\277\277\277" - "\377\277\277\277\377\277\277\277\377\277\277\277\377\277\277\277\377\277" - "\277\277\377\277\277\277\377\277\277\277\377\277\277\277\377\277\277\277" - "\377\277\277\277\377\277\277\277\377\277\277\277\377\277\277\277\377\277" - "\277\277\377\277\277\277\377\277\277\277\377\343mT\377\377R\0\377\377o\0" - "\377\377o\0\377\377o\0\377\377V\0\377\343`D\377\254\254\254\377\236\236\236" - "\377\220\220\220\377\220\220\220\377\211\211\211\347\210\210\210\353\215" - "\215\215\342\230\230\230\312\252\252\252\246\300\300\300z\325\325\325P\342" - "\342\342-\363\363\363\26\342\342\342\11\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\316\316\316\377\241\241\241" - "\377\241\241\241\377\241\241\241\377\326_G\377\377f\0\377\377\224\0\377\377" - "\223\0\377\377\220\0\377\377\211\0\377\377\201\0\377\377y\0\377\377t\0\377" - "\377q\0\377\377p\0\377\377N\0\377\304ZD\377}}}\377rrr\377hhh\377```\377Z" - "ZZ\377VVV\377UUU\377VVV\377YYY\377???\377EEE\377LLL\377TTT\377[[[\377aaa" - "\377\231\231\231\377\235\235\235\377\237\237\237\377\240\240\240\377\240" - "\240\240\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241" - "\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241" - "\241\241\377\241\241\241\377\241\241\241\377\223\223\223\377]]]\377PPP\377" - "PPP\377PPP\377PPP\377kkk\377\344\344\344\377\343\343\343\377\342\342\342" - "\377\340\340\340\377\335\335\335\377\327\327\327\377\320\320\320\377\313" - "\313\313\377\306\306\306\377\306\306\306\377\306\306\306\377\307\307\307" - "\377\311\311\311\377\312\312\312\377\314\314\314\377\315\315\315\377\315" - "\315\315\377HHH\377HHH\377III\377III\377III\377III\377\320\320\320\377\320" - "\320\320\377\320\320\320\377\320\320\320\377\320\320\320\377\320\320\320" - "\377\320\320\320\377\320\320\320\377\320\320\320\377\320\320\320\377\320" - "\320\320\377\320\320\320\377\320\320\320\377\320\320\320\377\320\320\320" - "\377\320\320\320\377\320\320\320\377\320\320\320\377\320\320\320\377\371" - "A\32\377\377g\0\377\377o\0\377\377o\0\377\377o\0\377\377=\0\377\322\235\222" - "\377\266\266\266\377\247\247\247\377\226\226\226\377\224\224\224\377\215" - "\215\215\342\213\213\213\345\222\222\222\330\240\240\240\273\264\264\264" - "\224\311\311\311h\333\333\333@\350\350\350\"\357\357\357\20\324\324\324\6" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\316\316\316\377\241\241\241\377\241\241\241\377\271\204y\377\377" - "F\0\377\377\224\0\377\377\223\0\377\377\221\0\377\377\213\0\377\377\203\0" - "\377\377{\0\377\377u\0\377\377r\0\377\377p\0\377\377g\0\377\3608\21\377~" - "~~\377sss\377hhh\377```\377ZZZ\377VVV\377TTT\377UUU\377XXX\377]]]\377DDD" - "\377KKK\377SSS\377ZZZ\377aaa\377eee\377\234\234\234\377\236\236\236\377\240" - "\240\240\377\240\240\240\377\241\241\241\377\241\241\241\377\241\241\241" - "\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241" - "\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241" - "\377\206\206\206\377PPP\377PPP\377PPP\377PPP\377PPP\377\256\256\256\377\344" - "\344\344\377\344\344\344\377\343\343\343\377\342\342\342\377\340\340\340" - "\377\335\335\335\377\331\331\331\377\327\327\327\377\325\325\325\377\324" - "\324\324\377\325\325\325\377\326\326\326\377\327\327\327\377\327\327\327" - "\377\330\330\330\377\330\330\330\377\331\331\331\377LLL\377MMM\377MMM\377" - "MMM\377MMM\377MMM\377\333\333\333\377\333\333\333\377\333\333\333\377\333" - "\333\333\377\333\333\333\377\333\333\333\377\333\333\333\377\333\333\333" - "\377\333\333\333\377\333\333\333\377\333\333\333\377\333\333\333\377\333" - "\333\333\377\333\333\333\377\333\333\333\377\333\333\333\377\333\333\333" - "\377\333\333\333\377\344\257\244\377\377=\0\377\377o\0\377\377o\0\377\377" - "o\0\377\377g\0\377\371A\32\377\313\313\313\377\275\275\275\377\253\253\253" - "\377\230\230\230\377\227\227\227\377\217\217\217\336\217\217\217\336\230" - "\230\230\314\250\250\250\253\275\275\275\201\322\322\322V\345\345\3452\352" - "\352\352\31\347\347\347\13\277\277\277\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\316\316\316\377\241\241" - "\241\377\247\232\227\377\3719\11\377\377\215\0\377\377\224\0\377\377\221" - "\0\377\377\215\0\377\377\205\0\377\377}\0\377\377v\0\377\377r\0\377\377p" - "\0\377\377o\0\377\377=\0\377\237j_\377ttt\377iii\377```\377ZZZ\377VVV\377" - "TTT\377TTT\377VVV\377\\\\\\\377ddd\377III\377QQQ\377YYY\377___\377ddd\377" - "ggg\377\236\236\236\377\240\240\240\377\240\240\240\377\241\241\241\377\241" - "\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241" - "\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241" - "\241\241\377\241\241\241\377\241\241\241\377]]]\377PPP\377PPP\377PPP\377" - "PPP\377kkk\377\344\344\344\377\344\344\344\377\344\344\344\377\343\343\343" - "\377\343\343\343\377\342\342\342\377\340\340\340\377\340\340\340\377\336" - "\336\336\377\335\335\335\377\335\335\335\377\335\335\335\377\336\336\336" - "\377\336\336\336\377\337\337\337\377\337\337\337\377\340\340\340\377\340" - "\340\340\377NNN\377NNN\377OOO\377OOO\377OOO\377OOO\377\340\340\340\377\340" - "\340\340\377\340\340\340\377\340\340\340\377\340\340\340\377\340\340\340" - "\377\340\340\340\377\340\340\340\377\340\340\340\377\340\340\340\377\340" - "\340\340\377\340\340\340\377\340\340\340\377\340\340\340\377\340\340\340" - "\377\340\340\340\377\340\340\340\377\340\340\340\377\363pT\377\377V\0\377" - "\377o\0\377\377o\0\377\377o\0\377\377I\0\377\351\214y\377\315\315\315\377" - "\275\275\275\377\252\252\252\377\227\227\227\377\227\227\227\377\220\220" - "\220\333\223\223\223\326\236\236\236\277\261\261\261\232\305\305\305o\332" - "\332\332F\352\352\352&\360\360\360\22\332\332\332\7\177\177\177\2\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\316\316\316\377\241\241\241\377\342Q3\377\377s\0\377\377\224\0\377\377\223" - "\0\377\377\217\0\377\377\210\0\377\377\177\0\377\377x\0\377\377s\0\377\377" - "p\0\377\377o\0\377\377^\0\377\337A\40\377uuu\377jjj\377aaa\377ZZZ\377VVV" - "\377SSS\377SSS\377UUU\377ZZZ\377aaa\377kkk\377OOO\377WWW\377^^^\377ccc\377" - "ggg\377iii\377\240\240\240\377\240\240\240\377\241\241\241\377\241\241\241" - "\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241" - "\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241" - "\377\241\241\241\377\241\241\241\377\223\223\223\377PPP\377PPP\377PPP\377" - "PPP\377PPP\377\256\256\256\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\343\343\343\377\343\343\343\377\342\342\342\377\342" - "\342\342\377\341\341\341\377\341\341\341\377\341\341\341\377\341\341\341" - "\377\341\341\341\377\342\342\342\377\342\342\342\377\342\342\342\377\342" - "\342\342\377\342\342\342\377OOO\377OOO\377OOO\377OOO\377OOO\377OOO\377\343" - "\343\343\377\343\343\343\377\343\343\343\377\343\343\343\377\343\343\343" - "\377\343\343\343\377\343\343\343\377\343\343\343\377\343\343\343\377\343" - "\343\343\377\343\343\343\377\343\343\343\377\343\343\343\377\343\343\343" - "\377\343\343\343\377\343\343\343\377\343\343\343\377\343\343\343\377\375" - "7\16\377\377k\0\377\377o\0\377\377o\0\377\377k\0\377\375;\15\377\332\314" - "\312\377\313\313\313\377\272\272\272\377\246\246\246\377\224\224\224\377" - "\224\224\224\377\222\222\222\330\227\227\227\315\245\245\245\261\271\271" - "\271\210\315\315\315]\336\336\3367\354\354\354\34\351\351\351\14\314\314" - "\314\5\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\316\316\316\377\276|n\377\377M\0\377\377\224\0\377" - "\377\223\0\377\377\221\0\377\377\212\0\377\377\202\0\377\377z\0\377\377t" - "\0\377\377q\0\377\377p\0\377\377o\0\377\3774\0\377\207mg\377kkk\377bbb\377" - "ZZZ\377VVV\377SSS\377SSS\377TTT\377XXX\377___\377hhh\377ttt\377UUU\377\\" - "\\\\\377bbb\377fff\377hhh\377jjj\377\240\240\240\377\241\241\241\377\241" - "\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241" - "\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241" - "\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377kkk\377PPP\377" - "PPP\377PPP\377PPP\377]]]\377\326\326\326\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\343" - "\343\343\377\343\343\343\377\343\343\343\377\343\343\343\377\343\343\343" - "\377\343\343\343\377\343\343\343\377\343\343\343\377\343\343\343\377\343" - "\343\343\377\343\343\343\377\343\343\343\377PPP\377PPP\377PPP\377PPP\377" - "PPP\377PPP\377\343\343\343\377\343\343\343\377\343\343\343\377\343\343\343" - "\377\343\343\343\377\343\343\343\377\343\343\343\377\343\343\343\377\343" - "\343\343\377\343\343\343\377\343\343\343\377\343\343\343\377\343\343\343" - "\377\343\343\343\377\343\343\343\377\343\343\343\377\343\343\343\377\354" - "\252\234\377\377A\0\377\377o\0\377\377o\0\377\377o\0\377\377V\0\377\362o" - "S\377\324\324\324\377\306\306\306\377\265\265\265\377\241\241\241\377\220" - "\220\220\377\223\223\223\377\223\223\223\324\235\235\235\302\255\255\255" - "\240\302\302\302v\326\326\326L\347\347\347+\362\362\362\25\337\337\337\10" - "\252\252\252\3\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\321\304\302\377\364A\23\377\377\207\0\377" - "\377\224\0\377\377\222\0\377\377\216\0\377\377\205\0\377\377}\0\377\377v" - "\0\377\377r\0\377\377p\0\377\377o\0\377\377V\0\377\314I-\377mmm\377ccc\377" - "\\\\\\\377VVV\377SSS\377SSS\377SSS\377VVV\377\\\\\\\377eee\377ppp\377|||" - "\377ZZZ\377aaa\377fff\377hhh\377jjj\377kkk\377\240\240\240\377\241\241\241" - "\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241" - "\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241" - "\377\241\241\241\377\241\241\241\377\241\241\241\377\223\223\223\377PPP\377" - "PPP\377PPP\377PPP\377PPP\377\223\223\223\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377PPP\377PPP\377" - "PPP\377PPP\377PPP\377PPP\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\367fH\377\377Z\0\377\377o\0\377\377o\0\377\377o\0\377\3779\0" - "\377\341\271\261\377\320\320\320\377\301\301\301\377\255\255\255\377\233" - "\233\233\377\214\214\214\377\223\223\223\377\227\227\227\316\243\243\243" - "\265\265\265\265\217\314\314\314d\335\335\335=\347\347\347\40\354\354\354" - "\16\314\314\314\5\177\177\177\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\347}g\377\377`\0\377\377\224" - "\0\377\377\223\0\377\377\220\0\377\377\211\0\377\377\200\0\377\377w\0\377" - "\377s\0\377\377p\0\377\377o\0\377\377k\0\377\3705\7\377wjg\377ddd\377\\\\" - "\\\377VVV\377SSS\377RRR\377SSS\377UUU\377ZZZ\377aaa\377lll\377yyy\377\205" - "\205\205\377___\377ddd\377hhh\377iii\377jjj\377kkk\377\241\241\241\377\241" - "\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241" - "\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241" - "\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\206\206\206" - "\377PPP\377PPP\377PPP\377PPP\377PPP\377\311\311\311\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377PPP\377" - "PPP\377PPP\377PPP\377PPP\377PPP\377\344\344\344\377\344\344\344\377\344\344" - "\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377" - "\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344" - "\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377" - "\346\330\326\377\3770\0\377\377o\0\377\377o\0\377\377o\0\377\377b\0\377\371" - "N*\377\327\327\327\377\314\314\314\377\272\272\272\377\247\247\247\377\225" - "\225\225\377\211\211\211\377\223\223\223\377\233\233\233\305\251\251\251" - "\247\277\277\277}\323\323\323S\344\344\3440\351\351\351\30\345\345\345\12" - "\252\252\252\3\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\337\327\40\3779\0\377\377\224\0\377\377" - "\224\0\377\377\222\0\377\377\214\0\377\377\204\0\377\377{\0\377\377t\0\377" - "\377q\0\377\377p\0\377\377o\0\377\377N\0\377\270N8\377fff\377]]]\377XXX\377" - "TTT\377RRR\377RRR\377TTT\377XXX\377^^^\377hhh\377ttt\377\201\201\201\377" - "\214\214\214\377ccc\377ggg\377iii\377jjj\377kkk\377kkk\377\241\241\241\377" - "\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241" - "\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377" - "\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377kkk\377P" - "PP\377PPP\377PPP\377PPP\377\206\206\206\377\344\344\344\377\344\344\344\377" - "\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344" - "\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377" - "\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344" - "\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377" - "PPP\377PPP\377PPP\377PPP\377PPP\377PPP\377\344\344\344\377\344\344\344\377" - "\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344" - "\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377" - "\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344" - "\344\377\356\237\216\377\377E\0\377\377o\0\377\377o\0\377\377o\0\377\377" - "E\0\377\352\232\212\377\324\324\324\377\306\306\306\377\264\264\264\377\240" - "\240\240\377\220\220\220\377\207\207\207\377\224\224\224\377\241\241\241" - "\272\262\262\262\226\310\310\310k\334\334\334C\351\351\351$\360\360\360\21" - "\332\332\332\7\177\177\177\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377`>\277\377z\0\377\377\224" - "\0\377\377\223\0\377\377\217\0\377\377\210\0\377\377\177\0\377\377w\0\377" - "\377r\0\377\377p\0\377\377o\0\377\377k\0\377\3675\7\377reb\377___\377XXX" - "\377UUU\377RRR\377RRR\377SSS\377VVV\377\\\\\\\377ddd\377ooo\377|||\377\210" - "\210\210\377\222\222\222\377fff\377hhh\377jjj\377kkk\377kkk\377kkk\377\241" - "\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241" - "\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241" - "\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\223\223\223" - "\377PPP\377PPP\377PPP\377PPP\377PPP\377\256\256\256\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344" - "\344\344\377PPP\377PPP\377PPP\377PPP\377PPP\377PPP\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\372O+\377\377b\0\377\377o\0\377\377o\0\377\377k\0\377" - "\375;\15\377\334\317\314\377\317\317\317\377\277\277\277\377\255\255\255" - "\377\232\232\232\377\214\214\214\377\206\206\206\377\231\231\231\377\247" - "\247\247\254\273\273\273\205\321\321\321Z\342\342\3425\354\354\354\33\351" - "\351\351\14\277\277\277\4\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\307\273@\377F\0\377\377\224" - "\0\377\377\224\0\377\377\221\0\377\377\214\0\377\377\203\0\377\377z\0\377" - "\377s\0\377\377q\0\377\377o\0\377\377o\0\377\377N\0\377\265K5\377aaa\377" - "ZZZ\377UUU\377SSS\377QQQ\377RRR\377TTT\377XXX\377```\377kkk\377www\377\204" - "\204\204\377\217\217\217\377\227\227\227\377hhh\377jjj\377kkk\377kkk\377" - "kkk\377kkk\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241" - "\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241" - "\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241" - "\377\206\206\206\377PPP\377PPP\377PPP\377PPP\377]]]\377\326\326\326\377\344" - "\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\344\344\344\377PPP\377PPP\377PPP\377PPP\377PPP\377PPP\377\344" - "\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\347\315\307\377\3774\0\377\377o\0\377\377o\0\377\377" - "o\0\377\377V\0\377\363oT\377\327\327\327\377\312\312\312\377\271\271\271" - "\377\245\245\245\377\224\224\224\377\211\211\211\377\207\207\207\377\235" - "\235\235\377\257\257\257\235\303\303\303s\331\331\331J\346\346\346)\361\361" - "\361\23\337\337\337\10\252\252\252\3\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377`>\277\377z\0\377" - "\377\224\0\377\377\223\0\377\377\217\0\377\377\207\0\377\377~\0\377\377v" - "\0\377\377r\0\377\377p\0\377\377o\0\377\377o\0\377\3774\0\377w]W\377\\\\" - "\\\377VVV\377SSS\377QQQ\377QQQ\377SSS\377VVV\377\\\\\\\377fff\377rrr\377" - "\177\177\177\377\213\213\213\377\224\224\224\377\233\233\233\377iii\377j" - "jj\377kkk\377kkk\377kkk\377kkk\377\241\241\241\377\241\241\241\377\241\241" - "\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377" - "\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241" - "\241\377\241\241\241\377]]]\377PPP\377PPP\377PPP\377PPP\377\206\206\206\377" - "\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344" - "\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377" - "\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344" - "\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377" - "\344\344\344\377\344\344\344\377\344\344\344\377PPP\377PPP\377PPP\377PPP" - "\377PPP\377PPP\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344" - "\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377" - "\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344" - "\344\377\344\344\344\377\344\344\344\377\360\223\200\377\377I\0\377\377o" - "\0\377\377o\0\377\377o\0\377\3779\0\377\343\273\263\377\323\323\323\377\305" - "\305\305\377\262\262\262\377\237\237\237\377\217\217\217\377\210\210\210" - "\377\212\212\212\377\243\243\243\377\267\267\267\214\315\315\315a\340\340" - "\340;\356\356\356\37\354\354\354\16\314\314\314\5\177\177\177\2\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377" - "\307\273@\377F\0\377\377\224\0\377\377\223\0\377\377\221\0\377\377\213\0" - "\377\377\202\0\377\377y\0\377\377t\0\377\377q\0\377\377o\0\377\377o\0\377" - "\377V\0\377\306C'\377^^^\377XXX\377SSS\377RRR\377QQQ\377RRR\377UUU\377ZZ" - "Z\377aaa\377mmm\377yyy\377\206\206\206\377\221\221\221\377\230\230\230\377" - "\235\235\235\377\237\237\237\377\240\240\240\377\240\240\240\377\241\241" - "\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377" - "\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241" - "\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377" - "\241\241\241\377\223\223\223\377PPP\377PPP\377PPP\377PPP\377PPP\377\256\256" - "\256\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377" - "\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344" - "\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377" - "\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344" - "\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377" - "\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344" - "\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377" - "\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344" - "\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377" - "\344\344\344\377\344\344\344\377\374C\35\377\377g\0\377\377o\0\377\377o\0" - "\377\377b\0\377\371N*\377\331\331\331\377\317\317\317\377\276\276\276\377" - "\254\254\254\377\231\231\231\377\213\213\213\377\210\210\210\377\215\215" - "\215\377\252\252\252\377\300\300\300{\322\322\322Q\343\343\343.\350\350\350" - "\27\342\342\342\11\252\252\252\3\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377`>\277\377z\0\377\377" - "\224\0\377\377\222\0\377\377\216\0\377\377\207\0\377\377}\0\377\377v\0\377" - "\377r\0\377\377p\0\377\377o\0\377\377o\0\377\3779\0\377\177WO\377YYY\377" - "UUU\377RRR\377QQQ\377QQQ\377SSS\377VVV\377]]]\377ggg\377ttt\377\201\201\201" - "\377\214\214\214\377\226\226\226\377\233\233\233\377\236\236\236\377\240" - "\240\240\377\240\240\240\377\241\241\241\377\241\241\241\377\241\241\241" - "\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241" - "\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241" - "\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\206" - "\206\206\377PPP\377PPP\377PPP\377PPP\377]]]\377\326\326\326\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\351" - "\301\271\377\3779\0\377\377o\0\377\377o\0\377\377o\0\377\377E\0\377\352\233" - "\212\377\326\326\326\377\311\311\311\377\267\267\267\377\245\245\245\377" - "\224\224\224\377\212\212\212\377\211\211\211\377\222\222\222\377\262\262" - "\262\377\311\311\311i\333\333\333A\351\351\351#\357\357\357\20\324\324\324" - "\6\177\177\177\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\377\324\3110\377@\0\377\377\224\0\377\377\224\0" - "\377\377\221\0\377\377\212\0\377\377\201\0\377\377x\0\377\377s\0\377\377" - "q\0\377\377p\0\377\377o\0\377\377^\0\377\330:\31\377\\\\\\\377VVV\377SSS" - "\377QQQ\377QQQ\377RRR\377UUU\377ZZZ\377bbb\377nnn\377zzz\377\210\210\210" - "\377\222\222\222\377\231\231\231\377\235\235\235\377\240\240\240\377\240" - "\240\240\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241" - "\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241" - "\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241" - "\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377kkk\377" - "PPP\377PPP\377PPP\377PPP\377\206\206\206\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\363" - "}d\377\377R\0\377\377o\0\377\377o\0\377\377k\0\377\375;\15\377\335\320\315" - "\377\322\322\322\377\303\303\303\377\261\261\261\377\236\236\236\377\217" - "\217\217\377\211\211\211\377\213\213\213\377\230\230\230\377\272\272\272" - "\377\320\320\320X\341\341\3414\353\353\353\32\347\347\347\13\277\277\277" - "\4\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\377y^\237\377m\0\377\377\224\0\377\377\223\0\377\377\216" - "\0\377\377\206\0\377\377|\0\377\377u\0\377\377q\0\377\377p\0\377\377o\0\377" - "\377o\0\377\377E\0\377\233K;\377XXX\377SSS\377QQQ\377QQQ\377QQQ\377SSS\377" - "WWW\377^^^\377hhh\377ttt\377\202\202\202\377\215\215\215\377\226\226\226" - "\377\234\234\234\377\237\237\237\377\240\240\240\377\240\240\240\377\241" - "\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241" - "\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241" - "\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241" - "\377\241\241\241\377\241\241\241\377\223\223\223\377PPP\377PPP\377PPP\377" - "PPP\377PPP\377\256\256\256\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\374C\35\377\377g\0\377" - "\377o\0\377\377o\0\377\377V\0\377\363pT\377\330\330\330\377\316\316\316\377" - "\275\275\275\377\252\252\252\377\230\230\230\377\213\213\213\377\211\211" - "\211\377\220\220\220\377\236\236\236\377\303\303\303\377\330\330\330I\345" - "\345\345(\361\361\361\23\337\337\337\10\252\252\252\3\0\0\0\1\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\357\337" - "\20\3773\0\377\377\224\0\377\377\224\0\377\377\222\0\377\377\213\0\377\377" - "\202\0\377\377y\0\377\377s\0\377\377p\0\377\377o\0\377\377o\0\377\377k\0" - "\377\365/\6\377ZZZ\377UUU\377RRR\377QQQ\377QQQ\377RRR\377UUU\377ZZZ\377b" - "bb\377nnn\377{{{\377\210\210\210\377\222\222\222\377\231\231\231\377\236" - "\236\236\377\240\240\240\377\240\240\240\377\241\241\241\377\241\241\241" - "\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241" - "\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241" - "\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241" - "\241\241\377\241\241\241\377\206\206\206\377PPP\377PPP\377PPP\377PPP\377" - "PPP\377\311\311\311\377\344\344\344\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\354\252\234\377\377A\0\377\377o\0\377\377o\0" - "\377\377o\0\377\3779\0\377\344\274\264\377\325\325\325\377\310\310\310\377" - "\266\266\266\377\243\243\243\377\223\223\223\377\212\212\212\377\213\213" - "\213\377\225\225\225\377\245\245\245\377\314\314\314\377\340\340\340:\356" - "\356\356\36\353\353\353\15\314\314\314\5\177\177\177\2\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\223}\200" - "\377a\0\377\377\224\0\377\377\224\0\377\377\220\0\377\377\210\0\377\377~" - "\0\377\377u\0\377\377q\0\377\377p\0\377\377o\0\377\377o\0\377\377V\0\377" - "\302>#\377VVV\377SSS\377QQQ\377QQQ\377QQQ\377SSS\377VVV\377]]]\377hhh\377" - "uuu\377\202\202\202\377\216\216\216\377\227\227\227\377\234\234\234\377\237" - "\237\237\377\240\240\240\377\240\240\240\377\241\241\241\377\241\241\241" - "\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241" - "\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241" - "\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241" - "\241\241\377\241\241\241\377\206\206\206\377PPP\377PPP\377PPP\377PPP\377" - "kkk\377\326\326\326\377\344\344\344\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\365qV\377\377V\0\377\377o\0\377\377o\0\377\377" - "g\0\377\373C\34\377\333\333\333\377\321\321\321\377\302\302\302\377\257\257" - "\257\377\234\234\234\377\217\217\217\377\212\212\212\377\216\216\216\377" - "\234\234\234\377\255\255\255\377\324\324\324\377\343\343\343.\363\363\363" - "\26\342\342\342\11\252\252\252\3\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377E\36\337\377\210\0\377" - "\377\224\0\377\377\223\0\377\377\216\0\377\377\205\0\377\377z\0\377\377s" - "\0\377\377p\0\377\377o\0\377\377o\0\377\377o\0\377\3779\0\377xQH\377UUU\377" - "RRR\377QQQ\377QQQ\377RRR\377UUU\377ZZZ\377bbb\377mmm\377{{{\377\210\210\210" - "\377\222\222\222\377\232\232\232\377\236\236\236\377\240\240\240\377\240" - "\240\240\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241" - "\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241" - "\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241" - "\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241" - "\241\241\377kkk\377PPP\377PPP\377PPP\377PPP\377\223\223\223\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\3758\16\377\377k\0\377\377o\0\377\377o\0\377\377I\0\377\355" - "\220}\377\330\330\330\377\314\314\314\377\274\274\274\377\250\250\250\377" - "\227\227\227\377\214\214\214\377\213\213\213\377\223\223\223\377\242\242" - "\242\377\265\265\265\377\333\333\333\377\351\351\351#\357\357\357\20\324" - "\324\324\6\177\177\177\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\324\3110\377@\0\377\377\224\0\377\377" - "\224\0\377\377\222\0\377\377\214\0\377\377\201\0\377\377x\0\377\377r\0\377" - "\377p\0\377\377o\0\377\377o\0\377\377g\0\377\3532\14\377VVV\377SSS\377QQ" - "Q\377QQQ\377QQQ\377SSS\377VVV\377]]]\377fff\377ttt\377\201\201\201\377\215" - "\215\215\377\226\226\226\377\234\234\234\377\245\230\225\377\276|n\377\320" - "fP\377\342Q3\377\347I(\377\347I(\377\347I(\377\342Q3\377\320fP\377\276|n" - "\377\247\232\227\377\241\241\241\377\241\241\241\377\241\241\241\377\241" - "\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241" - "\377\241\241\241\377\223\223\223\377]]]\377PPP\377PPP\377PPP\377PPP\377\256" - "\256\256\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\356\237\216\377\377E\0\377\377o\0\377\377o\0\377\377" - "o\0\377\3770\0\377\337\322\317\377\325\325\325\377\306\306\306\377\265\265" - "\265\377\242\242\242\377\223\223\223\377\213\213\213\377\214\214\214\377" - "\230\230\230\377\252\252\252\377\275\275\275\377\341\341\341\377\353\353" - "\353\32\347\347\347\13\277\277\277\4\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377y^\237\377m\0\377" - "\377\224\0\377\377\224\0\377\377\220\0\377\377\210\0\377\377}\0\377\377u" - "\0\377\377q\0\377\377o\0\377\377o\0\377\377o\0\377\377R\0\377\266@'\377T" - "TT\377QQQ\377QQQ\377QQQ\377QQQ\377TTT\377XXX\377aaa\377lll\377zzz\377\207" - "\207\207\377\231\214\211\377\277p_\377\355A\36\377\3770\0\377\377A\0\377" - "\377N\0\377\377[\0\377\377_\0\377\377^\0\377\377^\0\377\377Z\0\377\377N\0" - "\377\377A\0\377\3770\0\377\355B\36\377\304ud\377\247\232\227\377\241\241" - "\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377" - "\241\241\241\377\206\206\206\377PPP\377PPP\377PPP\377PPP\377PPP\377\311\311" - "\311\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377" - "\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344" - "\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377" - "\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344" - "\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377" - "\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344" - "\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377" - "\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344" - "\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377" - "\344\344\344\377\367fH\377\377Z\0\377\377o\0\377\377o\0\377\377Z\0\377\365" - "dF\377\332\332\332\377\320\320\320\377\301\301\301\377\256\256\256\377\234" - "\234\234\377\217\217\217\377\213\213\213\377\221\221\221\377\236\236\236" - "\377\261\261\261\377\304\304\304\377\347\347\347\377\361\361\361\23\337\337" - "\337\10\252\252\252\3\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3778\16\357\377\215\0\377\377\224\0" - "\377\377\222\0\377\377\215\0\377\377\204\0\377\377z\0\377\377s\0\377\377" - "p\0\377\377o\0\377\377o\0\377\377o\0\377\3779\0\377vNF\377SSS\377QQQ\377" - "QQQ\377QQQ\377RRR\377UUU\377\\\\\\\377eee\377rrr\377\200\200\200\377\306" - "\\F\377\3707\10\377\377E\0\377\377b\0\377\377p\0\377\377p\0\377\377q\0\377" - "\377q\0\377\377q\0\377\377q\0\377\377p\0\377\377p\0\377\377o\0\377\377o\0" - "\377\377o\0\377\377b\0\377\377E\0\377\3717\11\377\320fP\377\240\240\240\377" - "\240\240\240\377\240\240\240\377\241\241\241\377\241\241\241\377\206\206" - "\206\377PPP\377PPP\377PPP\377PPP\377kkk\377\344\344\344\377\344\344\344\377" - "\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344" - "\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377" - "\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344" - "\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377" - "\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344" - "\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377" - "\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344" - "\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377" - "\344\344\344\377\344\344\344\377\344\344\344\377\346\330\326\377\3770\0\377" - "\377o\0\377\377o\0\377\377o\0\377\377A\0\377\351\247\231\377\327\327\327" - "\377\313\313\313\377\272\272\272\377\247\247\247\377\226\226\226\377\214" - "\214\214\377\213\213\213\377\225\225\225\377\245\245\245\377\271\271\271" - "\377\312\312\312\377\354\354\354\377\353\353\353\15\314\314\314\5\177\177" - "\177\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\377\324\3110\377?\0\377\377\224\0\377\377\224\0\377\377\221" - "\0\377\377\212\0\377\377\200\0\377\377w\0\377\377r\0\377\377p\0\377\377o" - "\0\377\377o\0\377\377k\0\377\365/\6\377TTT\377RRR\377QQQ\377QQQ\377QQQ\377" - "SSS\377WWW\377___\377jjj\377\231dY\377\3607\21\377\377N\0\377\377k\0\377" - "\377p\0\377\377p\0\377\377q\0\377\377s\0\377\377t\0\377\377u\0\377\377u\0" - "\377\377t\0\377\377r\0\377\377q\0\377\377p\0\377\377o\0\377\377o\0\377\377" - "o\0\377\377o\0\377\377k\0\377\377N\0\377\363;\24\377\262\212\202\377\240" - "\240\240\377\240\240\240\377\240\240\240\377kkk\377PPP\377PPP\377PPP\377" - "PPP\377\206\206\206\377\344\344\344\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\360\223\200\377\377I\0\377\377o\0\377\377o\0" - "\377\377g\0\377\373C\34\377\335\335\335\377\324\324\324\377\306\306\306\377" - "\264\264\264\377\241\241\241\377\222\222\222\377\213\213\213\377\217\217" - "\217\377\234\234\234\377\255\255\255\377\300\300\300\377\317\317\317\377" - "\360\360\360\377\342\342\342\11\252\252\252\3\0\0\0\1\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\207n\217" - "\377f\0\377\377\224\0\377\377\223\0\377\377\217\0\377\377\207\0\377\377|" - "\0\377\377u\0\377\377q\0\377\377p\0\377\377o\0\377\377o\0\377\377V\0\377" - "\277<\40\377SSS\377QQQ\377QQQ\377QQQ\377RRR\377UUU\377ZZZ\377bbb\377\267" - "M7\377\377=\0\377\377g\0\377\377o\0\377\377o\0\377\377p\0\377\377q\0\377" - "\377s\0\377\377v\0\377\377z\0\377\377|\0\377\377}\0\377\377z\0\377\377w\0" - "\377\377t\0\377\377r\0\377\377p\0\377\377p\0\377\377o\0\377\377o\0\377\377" - "o\0\377\377o\0\377\377g\0\377\3779\0\377\303sc\377\236\236\236\377\237\237" - "\237\377\\\\\\\377PPP\377PPP\377PPP\377PPP\377\241\241\241\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\372" - "O+\377\377b\0\377\377o\0\377\377o\0\377\377R\0\377\361{b\377\332\332\332" - "\377\317\317\317\377\277\277\277\377\255\255\255\377\233\233\233\377\216" - "\216\216\377\213\213\213\377\223\223\223\377\242\242\242\377\265\265\265" - "\377\306\306\306\377\324\324\324\377\363\363\363\377\324\324\324\6\177\177" - "\177\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\377S.\317\377\200\0\377\377\224\0\377\377\223\0\377" - "\377\215\0\377\377\204\0\377\377z\0\377\377s\0\377\377p\0\377\377o\0\377" - "\377o\0\377\377o\0\377\377E\0\377\225F5\377RRR\377QQQ\377QQQ\377QQQ\377S" - "SS\377VVV\377]]]\377\306B'\377\377N\0\377\377o\0\377\377o\0\377\377o\0\377" - "\377p\0\377\377g\0\377\377`\0\377\377c\0\377\377x\0\377\377\203\0\377\377" - "\207\0\377\377\207\0\377\377\204\0\377\377\177\0\377\377z\0\377\377u\0\377" - "\377r\0\377\377p\0\377\377o\0\377\377o\0\377\377o\0\377\377o\0\377\377o\0" - "\377\377o\0\377\377E\0\377\323]D\377\217\217\217\377NNN\377OOO\377OOO\377" - "PPP\377PPP\377\273\273\273\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\347\315\307\377\3774\0\377\377o\0\377\377o\0\377\377" - "o\0\377\3774\0\377\342\310\302\377\327\327\327\377\312\312\312\377\271\271" - "\271\377\246\246\246\377\225\225\225\377\214\214\214\377\215\215\215\377" - "\230\230\230\377\251\251\251\377\274\274\274\377\315\315\315\377\327\327" - "\327\377\365\365\365\377\277\277\277\4\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\337\327\40\377" - "9\0\377\377\224\0\377\377\224\0\377\377\221\0\377\377\213\0\377\377\201\0" - "\377\377x\0\377\377r\0\377\377p\0\377\377o\0\377\377o\0\377\377o\0\377\377" - "4\0\377iNI\377QQQ\377QQQ\377QQQ\377QQQ\377SSS\377XXX\377\260F0\377\377N\0" - "\377\377o\0\377\377o\0\377\377o\0\377\377V\0\377\3775\0\377\363;\24\377\347" - "I(\377\347I(\377\3713\12\377\377>\0\377\377j\0\377\377\217\0\377\377\215" - "\0\377\377\210\0\377\377\201\0\377\377{\0\377\377v\0\377\377r\0\377\377p" - "\0\377\377p\0\377\377o\0\377\377o\0\377\377o\0\377\377o\0\377\377o\0\377" - "\377N\0\377\305[E\377MMM\377MMM\377NNN\377OOO\377\\\\\\\377\310\310\310\377" - "\343\343\343\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344" - "\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377" - "\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344" - "\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377" - "\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344" - "\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377" - "\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344" - "\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377" - "\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\362\210" - "r\377\377N\0\377\377o\0\377\377o\0\377\377b\0\377\371N*\377\334\334\334\377" - "\323\323\323\377\305\305\305\377\262\262\262\377\237\237\237\377\222\222" - "\222\377\213\213\213\377\221\221\221\377\236\236\236\377\260\260\260\377" - "\303\303\303\377\321\321\321\377\333\333\333\377\367\367\367\377\252\252" - "\252\3\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\377\257\234`\377S\0\377\377\224\0\377\377\223\0\377" - "\377\220\0\377\377\210\0\377\377~\0\377\377v\0\377\377r\0\377\377p\0\377" - "\377o\0\377\377o\0\377\377g\0\377\3521\13\377RRR\377QQQ\377QQQ\377QQQ\377" - "RRR\377UUU\377dWT\377\3664\6\377\377k\0\377\377o\0\377\377k\0\377\377=\0" - "\377\331V:\377\252\220\212\377\237\237\237\377\237\237\237\377\236\236\236" - "\377\234\234\234\377\254\204|\377\327T8\377\377?\0\377\377\177\0\377\377" - "\217\0\377\377\211\0\377\377\202\0\377\377{\0\377\377v\0\377\377r\0\377\377" - "p\0\377\377o\0\377\377o\0\377\377o\0\377\377o\0\377\377o\0\377\377o\0\377" - "\377E\0\377\216>.\377KKK\377LLL\377MMM\377iii\377\323\323\323\377\342\342" - "\342\377\343\343\343\377\344\344\344\377\344\344\344\377\344\344\344\377" - "\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344" - "\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377" - "\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344" - "\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377" - "\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344" - "\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377" - "\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344" - "\344\377\344\344\344\377\344\344\344\377\344\344\344\377\374C\35\377\377" - "g\0\377\377o\0\377\377o\0\377\377E\0\377\354\234\214\377\331\331\331\377" - "\317\317\317\377\276\276\276\377\254\254\254\377\232\232\232\377\216\216" - "\216\377\214\214\214\377\225\225\225\377\245\245\245\377\267\267\267\377" - "\311\311\311\377\326\326\326\377\336\336\336\377\370\370\370\377\177\177" - "\177\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\377\207n\217\377f\0\377\377\224\0\377\377\223\0\377" - "\377\217\0\377\377\206\0\377\377|\0\377\377u\0\377\377q\0\377\377o\0\377" - "\377o\0\377\377o\0\377\377Z\0\377\3119\32\377QQQ\377QQQ\377QQQ\377QQQ\377" - "SSS\377VVV\377\206QF\377\377=\0\377\377o\0\377\377^\0\377\3706\10\377\262" - "}r\377\235\235\235\377\236\236\236\377\236\236\236\377\235\235\235\377\232" - "\232\232\377\227\227\227\377\222\222\222\377\215\215\215\377\236wn\377\351" - "B\27\377\377l\0\377\377\217\0\377\377\212\0\377\377\203\0\377\377|\0\377" - "\377v\0\377\377s\0\377\377q\0\377\377o\0\377\377o\0\377\377o\0\377\377o\0" - "\377\377o\0\377\377k\0\377\3659\3\377iA9\377III\377KKK\377\201\201\201\377" - "\337\337\337\377\341\341\341\377\342\342\342\377\343\343\343\377\344\344" - "\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377" - "\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344" - "\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377" - "\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344" - "\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377" - "\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344" - "\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377" - "\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\351\301" - "\271\377\3779\0\377\377o\0\377\377o\0\377\377o\0\377\3770\0\377\340\323\320" - "\377\326\326\326\377\311\311\311\377\267\267\267\377\245\245\245\377\224" - "\224\224\377\214\214\214\377\217\217\217\377\233\233\233\377\254\254\254" - "\377\276\276\276\377\317\317\317\377\331\331\331\377\340\340\340\377\371" - "\371\371\377\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377S.\317\377\200\0\377\377\224\0\377" - "\377\223\0\377\377\216\0\377\377\204\0\377\377z\0\377\377t\0\377\377p\0\377" - "\377p\0\377\377o\0\377\377o\0\377\377N\0\377\251?)\377QQQ\377QQQ\377QQQ\377" - "QQQ\377SSS\377XXX\377j]Z\377\3674\7\377\377E\0\377\341C\"\377\231\214\211" - "\377\232\232\232\377\235\235\235\377\236\236\236\377\234\234\234\377\231" - "\231\231\377\224\224\224\377\217\217\217\377\210\210\210\377\201\201\201" - "\377{{{\377~pn\377\311F*\377\377l\0\377\377\220\0\377\377\212\0\377\377\204" - "\0\377\377|\0\377\377w\0\377\377s\0\377\377q\0\377\377p\0\377\377o\0\377" - "\377o\0\377\377o\0\377\377o\0\377\377b\0\377\3330\14\377DDD\377GGG\377{{" - "{\377\330\330\330\377\336\336\336\377\340\340\340\377\342\342\342\377\343" - "\343\343\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\363" - "}d\377\377R\0\377\377o\0\377\377o\0\377\377V\0\377\363pT\377\333\333\333" - "\377\322\322\322\377\303\303\303\377\260\260\260\377\236\236\236\377\221" - "\221\221\377\214\214\214\377\223\223\223\377\241\241\241\377\263\263\263" - "\377\305\305\305\377\323\323\323\377\334\334\334\377\340\340\340\377\372" - "\372\372\377\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377,\0\377\377\224\0\377\377\224\0\377" - "\377\222\0\377\377\215\0\377\377\202\0\377\377y\0\377\377s\0\377\377p\0\377" - "\377o\0\377\377o\0\377\377o\0\377\377=\0\377}H=\377QQQ\377PPP\377QQQ\377" - "RRR\377UUU\377ZZZ\377ccc\377\213c[\377\257_O\377\214\214\214\377\225\225" - "\225\377\233\233\233\377\235\235\235\377\233\233\233\377\230\230\230\377" - "\222\222\222\377\214\214\214\377\204\204\204\377|||\377uuu\377ooo\377iii" - "\377fff\377\330:\31\377\377y\0\377\377\220\0\377\377\213\0\377\377\204\0" - "\377\377}\0\377\377v\0\377\377s\0\377\377p\0\377\377o\0\377\377o\0\377\377" - "o\0\377\377o\0\377\377o\0\377\377N\0\377\2364\36\377BBB\377\214\214\214\377" - "\317\317\317\377\327\327\327\377\335\335\335\377\340\340\340\377\342\342" - "\342\377\343\343\343\377\344\344\344\377\344\344\344\377\344\344\344\377" - "\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344" - "\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377" - "\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344" - "\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377" - "\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344" - "\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377" - "\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\3758\16" - "\377\377k\0\377\377o\0\377\377o\0\377\377A\0\377\351\247\231\377\330\330" - "\330\377\315\315\315\377\275\275\275\377\252\252\252\377\231\231\231\377" - "\216\216\216\377\216\216\216\377\227\227\227\377\247\247\247\377\272\272" - "\272\377\313\313\313\377\327\327\327\377\337\337\337\377\341\341\341\377" - "\372\372\372\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\324\3110\377?\0\377\377\224\0\377\377" - "\224\0\377\377\222\0\377\377\213\0\377\377\201\0\377\377x\0\377\377r\0\377" - "\377p\0\377\377o\0\377\377o\0\377\377o\0\377\3774\0\377gLG\377QQQ\377PPP" - "\377QQQ\377RRR\377VVV\377\\\\\\\377fff\377ttt\377\202\202\202\377\217\217" - "\217\377\227\227\227\377\233\233\233\377\233\233\233\377\230\230\230\377" - "\222\222\222\377\212\212\212\377\201\201\201\377yyy\377rrr\377kkk\377ggg" - "\377ccc\377aaa\377h[X\377\3548\13\377\377\206\0\377\377\221\0\377\377\213" - "\0\377\377\204\0\377\377|\0\377\377u\0\377\377r\0\377\377p\0\377\377o\0\377" - "\377o\0\377\377o\0\377\377o\0\377\377o\0\377\3774\0\377T:4\377\213\213\213" - "\377\303\303\303\377\317\317\317\377\327\327\327\377\335\335\335\377\340" - "\340\340\377\342\342\342\377\343\343\343\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\354\252\234\377\377" - "A\0\377\377o\0\377\377o\0\377\377g\0\377\373C\34\377\335\335\335\377\325" - "\325\325\377\307\307\307\377\266\266\266\377\244\244\244\377\224\224\224" - "\377\215\215\215\377\220\220\220\377\234\234\234\377\256\256\256\377\301" - "\301\301\377\320\320\320\377\332\332\332\377\340\340\340\377\342\342\342" - "\377\372\372\372\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\257\234`\377S\0\377\377\224\0\377" - "\377\224\0\377\377\221\0\377\377\212\0\377\377\177\0\377\377w\0\377\377r" - "\0\377\377p\0\377\377o\0\377\377o\0\377\377o\0\377\377,\0\377QQQ\377QQQ\377" - "QQQ\377QQQ\377SSS\377WWW\377___\377jjj\377xxx\377\206\206\206\377\222\222" - "\222\377\230\230\230\377\233\233\233\377\231\231\231\377\223\223\223\377" - "\213\213\213\377\201\201\201\377xxx\377ppp\377kkk\377ggg\377ddd\377ccc\377" - "bbb\377aaa\377\207RG\377\377F\0\377\377\223\0\377\377\220\0\377\377\212\0" - "\377\377\202\0\377\377{\0\377\377u\0\377\377q\0\377\377p\0\377\377o\0\377" - "\377o\0\377\377o\0\377\377o\0\377\377V\0\377\2630\24\377\211\211\211\377" - "\252\252\252\377\266\266\266\377\301\301\301\377\311\311\311\377\317\317" - "\317\377\323\323\323\377\324\324\324\377\325\325\325\377\326\326\326\377" - "\326\326\326\377\326\326\326\377\326\326\326\377\326\326\326\377\326\326" - "\326\377\326\326\326\377\326\326\326\377\326\326\326\377\326\326\326\377" - "\326\326\326\377\326\326\326\377\344\344\344\377\344\344\344\377\344\344" - "\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377" - "\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344" - "\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377" - "\344\344\344\377\344\344\344\377\344\344\344\377\365qV\377\377V\0\377\377" - "o\0\377\377o\0\377\377R\0\377\361{b\377\333\333\333\377\321\321\321\377\302" - "\302\302\377\257\257\257\377\235\235\235\377\221\221\221\377\215\215\215" - "\377\224\224\224\377\244\244\244\377\266\266\266\377\307\307\307\377\325" - "\325\325\377\335\335\335\377\341\341\341\377\343\343\343\377\373\373\373" - "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\377\223}\200\377`\0\377\377\224\0\377\377\223\0\377" - "\377\220\0\377\377\210\0\377\377~\0\377\377u\0\377\377q\0\377\377p\0\377" - "\377o\0\377\377o\0\377\377^\0\377\3246\25\377QQQ\377PPP\377QQQ\377QQQ\377" - "TTT\377XXX\377aaa\377mmm\377|||\377\212\212\212\377\224\224\224\377\231\231" - "\231\377\232\232\232\377\226\226\226\377\217\217\217\377\205\205\205\377" - "zzz\377qqq\377kkk\377iii\377iii\377iii\377kkk\377kkk\377kkk\377iii\377\305" - "B&\377\377m\0\377\377\223\0\377\377\220\0\377\377\211\0\377\377\201\0\377" - "\377y\0\377\377t\0\377\377q\0\377\377p\0\377\377o\0\377\377o\0\377\377o\0" - "\377\377o\0\377\3774\0\377V<6\377CCC\377III\377PPP\377TTT\377XXX\377ZZZ\377" - "\\\\\\\377]]]\377]]]\377]]]\377]]]\377]]]\377]]]\377]]]\377]]]\377]]]\377" - "]]]\377]]]\377]]]\377\274\274\274\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\346\330\326\377\3770\0\377\377o\0\377" - "\377o\0\377\377o\0\377\3774\0\377\343\311\303\377\327\327\327\377\314\314" - "\314\377\274\274\274\377\251\251\251\377\230\230\230\377\216\216\216\377" - "\217\217\217\377\231\231\231\377\252\252\252\377\275\275\275\377\315\315" - "\315\377\330\330\330\377\337\337\337\377\342\342\342\377\343\343\343\377" - "\373\373\373\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377mN\257\377s\0\377\377\224\0\377\377\223" - "\0\377\377\217\0\377\377\206\0\377\377|\0\377\377u\0\377\377q\0\377\377p" - "\0\377\377o\0\377\377o\0\377\377^\0\377\3235\24\377QQQ\377PPP\377QQQ\377" - "RRR\377UUU\377ZZZ\377ddd\377qqq\377\200\200\200\377\214\214\214\377\226\226" - "\226\377\232\232\232\377\231\231\231\377\224\224\224\377\213\213\213\377" - "\200\200\200\377vvv\377ooo\377mmm\377nnn\377ppp\377ttt\377www\377yyy\377" - "xxx\377vvv\377\204id\377\3779\0\377\377\224\0\377\377\223\0\377\377\217\0" - "\377\377\210\0\377\377\177\0\377\377x\0\377\377s\0\377\377p\0\377\377o\0" - "\377\377o\0\377\377o\0\377\377o\0\377\377R\0\377\245.\26\377555\377:::\377" - "@@@\377EEE\377III\377MMM\377NNN\377OOO\377PPP\377PPP\377PPP\377PPP\377PP" - "P\377PPP\377PPP\377PPP\377PPP\377PPP\377PPP\377\311\311\311\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\356\237\216" - "\377\377E\0\377\377o\0\377\377o\0\377\377b\0\377\371N*\377\335\335\335\377" - "\324\324\324\377\306\306\306\377\265\265\265\377\242\242\242\377\224\224" - "\224\377\215\215\215\377\222\222\222\377\237\237\237\377\261\261\261\377" - "\304\304\304\377\322\322\322\377\333\333\333\377\340\340\340\377\342\342" - "\342\377\343\343\343\377\373\373\373\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377`>\277\377z\0" - "\377\377\224\0\377\377\223\0\377\377\216\0\377\377\204\0\377\377z\0\377\377" - "t\0\377\377p\0\377\377o\0\377\377o\0\377\377o\0\377\377N\0\377\250>(\377" - "QQQ\377PPP\377QQQ\377RRR\377UUU\377\\\\\\\377fff\377ttt\377\203\203\203\377" - "\217\217\217\377\230\230\230\377\233\233\233\377\231\231\231\377\223\223" - "\223\377\212\212\212\377\200\200\200\377www\377sss\377ttt\377www\377|||\377" - "\201\201\201\377\205\205\205\377\206\206\206\377\206\206\206\377\204\204" - "\204\377\200\200\200\377\315I.\377\377m\0\377\377\224\0\377\377\222\0\377" - "\377\216\0\377\377\206\0\377\377}\0\377\377v\0\377\377r\0\377\377p\0\377" - "\377o\0\377\377o\0\377\377o\0\377\377k\0\377\362,\3\377111\377555\377;;;" - "\377AAA\377FFF\377JJJ\377MMM\377OOO\377OOO\377PPP\377PPP\377PPP\377PPP\377" - "PPP\377PPP\377PPP\377PPP\377PPP\377kkk\377\344\344\344\377\344\344\344\377" - "\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344" - "\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377" - "\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344" - "\344\377\344\344\344\377\344\344\344\377\344\344\344\377\367fH\377\377Z\0" - "\377\377o\0\377\377o\0\377\377E\0\377\354\234\214\377\332\332\332\377\320" - "\320\320\377\300\300\300\377\256\256\256\377\234\234\234\377\220\220\220" - "\377\216\216\216\377\226\226\226\377\245\245\245\377\270\270\270\377\311" - "\311\311\377\327\327\327\377\336\336\336\377\341\341\341\377\343\343\343" - "\377\344\344\344\377\373\373\373\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3778\16\357\377\215" - "\0\377\377\224\0\377\377\222\0\377\377\215\0\377\377\203\0\377\377z\0\377" - "\377s\0\377\377p\0\377\377o\0\377\377o\0\377\377o\0\377\377N\0\377\250>(" - "\377PPP\377PPP\377QQQ\377SSS\377VVV\377]]]\377iii\377www\377\205\205\205" - "\377\221\221\221\377\231\231\231\377\233\233\233\377\231\231\231\377\224" - "\224\224\377\214\214\214\377\204\204\204\377~~~\377|||\377~~~\377\203\203" - "\203\377\210\210\210\377\215\215\215\377\220\220\220\377\222\222\222\377" - "\222\222\222\377\220\220\220\377\215\215\215\377\226|v\377\3779\0\377\377" - "\224\0\377\377\224\0\377\377\222\0\377\377\214\0\377\377\203\0\377\377z\0" - "\377\377t\0\377\377p\0\377\377p\0\377\377o\0\377\377o\0\377\377o\0\377\377" - "A\0\377o-\37\377111\377777\377===\377CCC\377HHH\377KKK\377NNN\377OOO\377" - "PPP\377PPP\377PPP\377PPP\377PPP\377PPP\377PPP\377PPP\377PPP\377\223\223\223" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\347\315\307\377\3774\0\377\377o\0\377\377o\0\377\377o\0\377\3770\0\377" - "\341\324\321\377\327\327\327\377\313\313\313\377\272\272\272\377\247\247" - "\247\377\227\227\227\377\216\216\216\377\220\220\220\377\234\234\234\377" - "\255\255\255\377\277\277\277\377\317\317\317\377\331\331\331\377\340\340" - "\340\377\342\342\342\377\343\343\343\377\344\344\344\377\373\373\373\377" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\377,\0\377\377\224\0\377\377\224\0\377\377\222\0\377\377" - "\214\0\377\377\202\0\377\377y\0\377\377s\0\377\377p\0\377\377o\0\377\377" - "o\0\377\377o\0\377\377N\0\377\250>(\377PPP\377QQQ\377QQQ\377SSS\377XXX\377" - "___\377kkk\377zzz\377\210\210\210\377\223\223\223\377\232\232\232\377\235" - "\235\235\377\233\233\233\377\227\227\227\377\221\221\221\377\213\213\213" - "\377\206\206\206\377\206\206\206\377\211\211\211\377\215\215\215\377\222" - "\222\222\377\226\226\226\377\230\230\230\377\231\231\231\377\231\231\231" - "\377\231\231\231\377\226\226\226\377\222\222\222\377\342D#\377\377z\0\377" - "\377\224\0\377\377\223\0\377\377\220\0\377\377\210\0\377\377~\0\377\377v" - "\0\377\377r\0\377\377p\0\377\377o\0\377\377o\0\377\377o\0\377\377V\0\377" - "\257,\20\377...\377333\377888\377>>>\377DDD\377III\377MMM\377NNN\377OOO\377" - "PPP\377PPP\377PPP\377PPP\377PPP\377PPP\377PPP\377PPP\377\274\274\274\377" - "\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344" - "\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377" - "\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344" - "\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377" - "\360\223\200\377\377I\0\377\377o\0\377\377o\0\377\377V\0\377\364pU\377\334" - "\334\334\377\323\323\323\377\306\306\306\377\263\263\263\377\241\241\241" - "\377\223\223\223\377\216\216\216\377\224\224\224\377\241\241\241\377\264" - "\264\264\377\306\306\306\377\324\324\324\377\334\334\334\377\340\340\340" - "\377\343\343\343\377\344\344\344\377\344\344\344\377\373\373\373\377\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\377,\0\377\377\224\0\377\377\224\0\377\377\222\0\377\377\213" - "\0\377\377\201\0\377\377x\0\377\377r\0\377\377p\0\377\377o\0\377\377o\0\377" - "\377o\0\377\377=\0\377}H=\377PPP\377QQQ\377QQQ\377TTT\377XXX\377aaa\377n" - "nn\377|||\377\212\212\212\377\225\225\225\377\233\233\233\377\235\235\235" - "\377\235\235\235\377\232\232\232\377\226\226\226\377\222\222\222\377\220" - "\220\220\377\221\221\221\377\222\222\222\377\226\226\226\377\231\231\231" - "\377\234\234\234\377\235\235\235\377\236\236\236\377\236\236\236\377\235" - "\235\235\377\233\233\233\377\231\231\231\377\274m\\\377\377S\0\377\377\224" - "\0\377\377\224\0\377\377\222\0\377\377\214\0\377\377\203\0\377\377y\0\377" - "\377s\0\377\377p\0\377\377o\0\377\377o\0\377\377o\0\377\377k\0\377\364.\5" - "\377QQQ\377WWW\377```\377kkk\377www\377\202\202\202\377\212\212\212\377\216" - "\216\216\377\221\221\221\377\222\222\222\377\223\223\223\377\206\206\206" - "\377PPP\377PPP\377PPP\377PPP\377]]]\377\311\311\311\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\372O+\377\377b\0\377" - "\377o\0\377\377o\0\377\377A\0\377\352\250\232\377\331\331\331\377\317\317" - "\317\377\277\277\277\377\255\255\255\377\234\234\234\377\220\220\220\377" - "\217\217\217\377\230\230\230\377\250\250\250\377\273\273\273\377\313\313" - "\313\377\327\327\327\377\337\337\337\377\342\342\342\377\343\343\343\377" - "\344\344\344\377\344\344\344\377\373\373\373\377\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377,\0\377" - "\377\224\0\377\377\224\0\377\377\222\0\377\377\213\0\377\377\200\0\377\377" - "w\0\377\377r\0\377\377p\0\377\377o\0\377\377o\0\377\377o\0\377\377=\0\377" - "}H=\377PPP\377QQQ\377QQQ\377TTT\377ZZZ\377ccc\377ppp\377\177\177\177\377" - "\215\215\215\377\226\226\226\377\234\234\234\377\236\236\236\377\236\236" - "\236\377\235\235\235\377\233\233\233\377\231\231\231\377\230\230\230\377" - "\230\230\230\377\231\231\231\377\234\234\234\377\235\235\235\377\236\236" - "\236\377\240\240\240\377\240\240\240\377\240\240\240\377\240\240\240\377" - "\236\236\236\377\235\235\235\377\237\222\217\377\3772\0\377\377\224\0\377" - "\377\224\0\377\377\223\0\377\377\217\0\377\377\206\0\377\377|\0\377\377u" - "\0\377\377q\0\377\377o\0\377\377o\0\377\377o\0\377\377o\0\377\3779\0\377" - "uME\377[[[\377ccc\377nnn\377|||\377\210\210\210\377\222\222\222\377\232\232" - "\232\377\236\236\236\377\240\240\240\377\240\240\240\377\206\206\206\377" - "PPP\377PPP\377PPP\377PPP\377kkk\377\326\326\326\377\344\344\344\377\344\344" - "\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377" - "\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344" - "\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377" - "\344\344\344\377\344\344\344\377\347\315\307\377\3774\0\377\377o\0\377\377" - "o\0\377\377g\0\377\373C\34\377\336\336\336\377\327\327\327\377\312\312\312" - "\377\270\270\270\377\245\245\245\377\226\226\226\377\216\216\216\377\221" - "\221\221\377\235\235\235\377\257\257\257\377\301\301\301\377\320\320\320" - "\377\332\332\332\377\340\340\340\377\342\342\342\377\343\343\343\377\344" - "\344\344\377\344\344\344\377\373\373\373\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377,\0\377\377" - "\224\0\377\377\224\0\377\377\221\0\377\377\212\0\377\377\200\0\377\377w\0" - "\377\377r\0\377\377p\0\377\377o\0\377\377o\0\377\377o\0\377\377=\0\377|G" - "<\377PPP\377QQQ\377RRR\377UUU\377[[[\377eee\377rrr\377\201\201\201\377\217" - "\217\217\377\230\230\230\377\235\235\235\377\237\237\237\377\240\240\240" - "\377\237\237\237\377\236\236\236\377\235\235\235\377\235\235\235\377\235" - "\235\235\377\236\236\236\377\236\236\236\377\240\240\240\377\240\240\240" - "\377\240\240\240\377\240\240\240\377\240\240\240\377\240\240\240\377\240" - "\240\240\377\237\237\237\377\235\235\235\377\345G&\377\377y\0\377\377\224" - "\0\377\377\224\0\377\377\221\0\377\377\211\0\377\377\177\0\377\377w\0\377" - "\377r\0\377\377p\0\377\377o\0\377\377o\0\377\377o\0\377\377I\0\377\237B/" - "\377WWW\377^^^\377hhh\377uuu\377\202\202\202\377\216\216\216\377\227\227" - "\227\377\235\235\235\377\237\237\237\377\240\240\240\377kkk\377PPP\377PP" - "P\377PPP\377PPP\377\206\206\206\377\344\344\344\377\344\344\344\377\344\344" - "\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377" - "\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344" - "\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377" - "\344\344\344\377\344\344\344\377\363}d\377\377R\0\377\377o\0\377\377o\0\377" - "\377R\0\377\361{b\377\334\334\334\377\322\322\322\377\304\304\304\377\262" - "\262\262\377\240\240\240\377\223\223\223\377\216\216\216\377\225\225\225" - "\377\244\244\244\377\266\266\266\377\307\307\307\377\325\325\325\377\335" - "\335\335\377\341\341\341\377\343\343\343\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\373\373\373\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377,\0\377\377\224\0" - "\377\377\224\0\377\377\221\0\377\377\212\0\377\377\177\0\377\377w\0\377\377" - "r\0\377\377p\0\377\377o\0\377\377o\0\377\377o\0\377\377=\0\377|G<\377PPP" - "\377QQQ\377RRR\377UUU\377\\\\\\\377fff\377ttt\377\203\203\203\377\220\220" - "\220\377\231\231\231\377\235\235\235\377\240\240\240\377\240\240\240\377" - "\240\240\240\377\240\240\240\377\237\237\237\377\237\237\237\377\237\237" - "\237\377\240\240\240\377\240\240\240\377\240\240\240\377\240\240\240\377" - "\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\240\240" - "\240\377\240\240\240\377\237\237\237\377\316dN\377\377_\0\377\377\224\0\377" - "\377\224\0\377\377\222\0\377\377\214\0\377\377\202\0\377\377x\0\377\377s" - "\0\377\377p\0\377\377o\0\377\377o\0\377\377o\0\377\377V\0\377\276:\37\377" - "UUU\377ZZZ\377bbb\377nnn\377|||\377\211\211\211\377\224\224\224\377\233\233" - "\233\377\236\236\236\377\240\240\240\377kkk\377PPP\377PPP\377PPP\377PPP\377" - "\241\241\241\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344" - "\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377" - "\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344" - "\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377" - "\344\344\344\377\374C\35\377\377g\0\377\377o\0\377\377o\0\377\3774\0\377" - "\344\311\304\377\331\331\331\377\316\316\316\377\276\276\276\377\253\253" - "\253\377\233\233\233\377\220\220\220\377\220\220\220\377\232\232\232\377" - "\253\253\253\377\275\275\275\377\315\315\315\377\330\330\330\377\337\337" - "\337\377\342\342\342\377\343\343\343\377\344\344\344\377\344\344\344\377" - "\344\344\344\377\373\373\373\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377,\0\377\377\224\0\377" - "\377\224\0\377\377\221\0\377\377\212\0\377\377\177\0\377\377v\0\377\377r" - "\0\377\377p\0\377\377o\0\377\377o\0\377\377o\0\377\377=\0\377|G<\377PPP\377" - "QQQ\377SSS\377VVV\377]]]\377hhh\377vvv\377\205\205\205\377\221\221\221\377" - "\231\231\231\377\236\236\236\377\240\240\240\377\240\240\240\377\240\240" - "\240\377\240\240\240\377\240\240\240\377\240\240\240\377\240\240\240\377" - "\240\240\240\377\240\240\240\377\241\241\241\377\241\241\241\377\241\241" - "\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377" - "\240\240\240\377\240\240\240\377\266\201v\377\377E\0\377\377\224\0\377\377" - "\224\0\377\377\223\0\377\377\216\0\377\377\205\0\377\377{\0\377\377t\0\377" - "\377q\0\377\377o\0\377\377o\0\377\377o\0\377\377^\0\377\3235\24\377SSS\377" - "WWW\377^^^\377iii\377vvv\377\204\204\204\377\220\220\220\377\230\230\230" - "\377\235\235\235\377\222\222\222\377]]]\377PPP\377PPP\377PPP\377PPP\377\274" - "\274\274\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\351" - "\301\271\377\3779\0\377\377o\0\377\377o\0\377\377b\0\377\371N*\377\336\336" - "\336\377\326\326\326\377\310\310\310\377\267\267\267\377\245\245\245\377" - "\225\225\225\377\217\217\217\377\223\223\223\377\237\237\237\377\261\261" - "\261\377\304\304\304\377\322\322\322\377\333\333\333\377\340\340\340\377" - "\342\342\342\377\343\343\343\377\344\344\344\377\344\344\344\377\344\344" - "\344\377\373\373\373\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377,\0\377\377\224\0\377\377\224" - "\0\377\377\221\0\377\377\211\0\377\377\177\0\377\377v\0\377\377r\0\377\377" - "p\0\377\377o\0\377\377o\0\377\377o\0\377\377=\0\377|G<\377PPP\377QQQ\377" - "SSS\377VVV\377^^^\377iii\377www\377\206\206\206\377\222\222\222\377\232\232" - "\232\377\236\236\236\377\240\240\240\377\240\240\240\377\241\241\241\377" - "\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241" - "\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377" - "\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241" - "\241\377\240\240\240\377\240\240\240\377\377,\0\377\377\223\0\377\377\224" - "\0\377\377\223\0\377\377\220\0\377\377\207\0\377\377}\0\377\377u\0\377\377" - "q\0\377\377p\0\377\377o\0\377\377o\0\377\377k\0\377\364.\5\377RRR\377UUU" - "\377[[[\377ddd\377ppp\377\177\177\177\377\214\214\214\377\226\226\226\377" - "\234\234\234\377\221\221\221\377PPP\377PPP\377PPP\377PPP\377PPP\377\311\311" - "\311\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377" - "\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344" - "\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377" - "\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\363}d\377" - "\377R\0\377\377o\0\377\377o\0\377\377E\0\377\354\234\214\377\333\333\333" - "\377\321\321\321\377\303\303\303\377\260\260\260\377\237\237\237\377\223" - "\223\223\377\217\217\217\377\226\226\226\377\246\246\246\377\270\270\270" - "\377\311\311\311\377\327\327\327\377\336\336\336\377\341\341\341\377\343" - "\343\343\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\373\373\373\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377,\0\377\377\224\0\377\377\224\0\377" - "\377\221\0\377\377\211\0\377\377\177\0\377\377v\0\377\377q\0\377\377p\0\377" - "\377o\0\377\377o\0\377\377o\0\377\377=\0\377|G<\377PPP\377QQQ\377SSS\377" - "WWW\377___\377kkk\377yyy\377\207\207\207\377\223\223\223\377\233\233\233" - "\377\236\236\236\377\240\240\240\377\240\240\240\377\206\206\206\377\223" - "\223\223\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241" - "\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241" - "\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241" - "\377\240\240\240\377\240\240\240\377\355A\36\377\377\200\0\377\377\224\0" - "\377\377\224\0\377\377\221\0\377\377\212\0\377\377\200\0\377\377w\0\377\377" - "r\0\377\377p\0\377\377o\0\377\377o\0\377\377o\0\377\377,\0\377QQQ\377SSS" - "\377XXX\377```\377lll\377zzz\377\210\210\210\377\223\223\223\377\232\232" - "\232\377\204\204\204\377PPP\377PPP\377PPP\377PPP\377]]]\377\326\326\326\377" - "\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344" - "\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377" - "\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344" - "\344\377\344\344\344\377\344\344\344\377\344\344\344\377\3758\16\377\377" - "k\0\377\377o\0\377\377o\0\377\3770\0\377\324\307\304\377\231\231\231\377" - "\251\251\251\377\275\275\275\377\252\252\252\377\232\232\232\377\220\220" - "\220\377\221\221\221\377\234\234\234\377\255\255\255\377\277\277\277\377" - "\317\317\317\377\331\331\331\377\340\340\340\377\342\342\342\377\343\343" - "\343\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377" - "\373\373\373\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377,\0\377\377\224\0\377\377\224\0\377\377" - "\221\0\377\377\211\0\377\377\177\0\377\377v\0\377\377r\0\377\377p\0\377\377" - "o\0\377\377o\0\377\377o\0\377\377=\0\377|G<\377QQQ\377QQQ\377SSS\377WWW\377" - "___\377kkk\377zzz\377\210\210\210\377\224\224\224\377\233\233\233\377\236" - "\236\236\377\240\240\240\377\206\206\206\377kkk\377kkk\377kkk\377\206\206" - "\206\377\223\223\223\377\241\241\241\377\241\241\241\377\241\241\241\377" - "\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241" - "\241\377\241\241\241\377\241\241\241\377\241\241\241\377\240\240\240\377" - "\341P2\377\377r\0\377\377\224\0\377\377\224\0\377\377\222\0\377\377\214\0" - "\377\377\202\0\377\377x\0\377\377s\0\377\377p\0\377\377o\0\377\377o\0\377" - "\377o\0\377\3770\0\377\\OL\377SSS\377VVV\377]]]\377hhh\377uuu\377\204\204" - "\204\377\220\220\220\377\231\231\231\377\203\203\203\377OOO\377PPP\377PP" - "P\377PPP\377kkk\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344" - "\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377" - "\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344" - "\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377" - "\354\252\234\377\377A\0\377\377o\0\377\377o\0\377\377V\0\377\326R7\377ZZ" - "Z\377KKK\377QQQ\377\240\240\240\377\244\244\244\377\225\225\225\377\217\217" - "\217\377\224\224\224\377\242\242\242\377\264\264\264\377\306\306\306\377" - "\324\324\324\377\334\334\334\377\340\340\340\377\343\343\343\377\344\344" - "\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377" - "\373\373\373\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377,\0\377\377\224\0\377\377\224\0\377\377" - "\221\0\377\377\211\0\377\377\177\0\377\377w\0\377\377r\0\377\377p\0\377\377" - "o\0\377\377o\0\377\377o\0\377\377E\0\377\222B2\377QQQ\377QQQ\377SSS\377X" - "XX\377```\377mmm\377{{{\377\211\211\211\377\224\224\224\377\233\233\233\377" - "\236\236\236\377\222\222\222\377kkk\377kkk\377kkk\377kkk\377kkk\377kkk\377" - "\206\206\206\377\223\223\223\377\241\241\241\377\241\241\241\377\241\241" - "\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377" - "\241\241\241\377\241\241\241\377\240\240\240\377\320fP\377\377_\0\377\377" - "\224\0\377\377\224\0\377\377\223\0\377\377\215\0\377\377\204\0\377\377y\0" - "\377\377s\0\377\377p\0\377\377o\0\377\377o\0\377\377o\0\377\377=\0\377}H" - "=\377RRR\377UUU\377ZZZ\377ddd\377rrr\377\200\200\200\377\215\215\215\377" - "\227\227\227\377\202\202\202\377OOO\377PPP\377PPP\377PPP\377\206\206\206" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\365qV\377\377" - "V\0\377\377o\0\377\377o\0\377\377A\0\377\206D6\377MMM\377III\377DDD\377R" - "RR\377\224\224\224\377\222\222\222\377\220\220\220\377\230\230\230\377\250" - "\250\250\377\273\273\273\377\313\313\313\377\327\327\327\377\337\337\337" - "\377\342\342\342\377\343\343\343\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\344\344\344\377\373\373\373\377\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\377,\0\377\377\224\0\377\377\224\0\377\377\221\0\377\377\212\0\377\377" - "\177\0\377\377v\0\377\377r\0\377\377p\0\377\377o\0\377\377o\0\377\377o\0" - "\377\377N\0\377\250>(\377QQQ\377QQQ\377SSS\377XXX\377aaa\377mmm\377|||\377" - "\212\212\212\377\225\225\225\377\233\233\233\377\221\221\221\377kkk\377k" - "kk\377kkk\377kkk\377kkk\377kkk\377kkk\377kkk\377kkk\377kkk\377\206\206\206" - "\377\223\223\223\377\241\241\241\377\241\241\241\377\241\241\241\377\241" - "\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\312mZ\377\377" - "X\0\377\377\224\0\377\377\224\0\377\377\223\0\377\377\216\0\377\377\204\0" - "\377\377z\0\377\377s\0\377\377p\0\377\377o\0\377\377o\0\377\377o\0\377\377" - "=\0\377}H=\377QQQ\377TTT\377XXX\377aaa\377nnn\377|||\377\212\212\212\377" - "\225\225\225\377ggg\377OOO\377PPP\377PPP\377PPP\377\206\206\206\377\344\344" - "\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377" - "\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344" - "\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377" - "\344\344\344\377\326\326\326\377\274\274\274\377\3702\11\377\377k\0\377\377" - "o\0\377\377k\0\377\364.\5\377NNN\377LLL\377HHH\377BBB\377;;;\377ccc\377\220" - "\220\220\377\222\222\222\377\235\235\235\377\257\257\257\377\301\301\301" - "\377\320\320\320\377\332\332\332\377\340\340\340\377\342\342\342\377\343" - "\343\343\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\373\373\373\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377,\0\377\377\224\0" - "\377\377\224\0\377\377\221\0\377\377\212\0\377\377\200\0\377\377w\0\377\377" - "r\0\377\377p\0\377\377o\0\377\377o\0\377\377o\0\377\377N\0\377\250>(\377" - "QQQ\377QQQ\377SSS\377XXX\377aaa\377mmm\377|||\377\212\212\212\377\225\225" - "\225\377\234\234\234\377\221\221\221\377kkk\377kkk\377kkk\377kkk\377kkk\377" - "kkk\377kkk\377kkk\377kkk\377kkk\377kkk\377kkk\377kkk\377\206\206\206\377" - "\223\223\223\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241" - "\241\377\270\203x\377\377E\0\377\377\224\0\377\377\224\0\377\377\223\0\377" - "\377\216\0\377\377\205\0\377\377{\0\377\377s\0\377\377p\0\377\377o\0\377" - "\377o\0\377\377o\0\377\377=\0\377}H=\377QQQ\377SSS\377WWW\377___\377kkk\377" - "yyy\377\207\207\207\377\223\223\223\377ggg\377OOO\377PPP\377PPP\377PPP\377" - "\223\223\223\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344" - "\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377" - "\344\344\344\377\344\344\344\377\344\344\344\377\326\326\326\377\311\311" - "\311\377\256\256\256\377\206\206\206\377]]]\377\222B2\377\377E\0\377\377" - "o\0\377\377o\0\377\377R\0\377\262;#\377MMM\377JJJ\377FFF\377???\377999\377" - "```\377\220\220\220\377\225\225\225\377\244\244\244\377\266\266\266\377\307" - "\307\307\377\325\325\325\377\335\335\335\377\341\341\341\377\343\343\343" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\373\373\373\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377,\0\377\377" - "\224\0\377\377\224\0\377\377\221\0\377\377\212\0\377\377\200\0\377\377w\0" - "\377\377r\0\377\377p\0\377\377o\0\377\377o\0\377\377o\0\377\377N\0\377\250" - ">(\377QQQ\377QQQ\377SSS\377XXX\377aaa\377mmm\377|||\377\212\212\212\377\225" - "\225\225\377\234\234\234\377\237\237\237\377\240\240\240\377\206\206\206" - "\377kkk\377kkk\377kkk\377kkk\377kkk\377kkk\377kkk\377kkk\377kkk\377kkk\377" - "kkk\377kkk\377kkk\377kkk\377\206\206\206\377\206\206\206\377\223\223\223" - "\377\255xm\377\377E\0\377\377\224\0\377\377\224\0\377\377\223\0\377\377\217" - "\0\377\377\206\0\377\377{\0\377\377t\0\377\377q\0\377\377o\0\377\377o\0\377" - "\377o\0\377\377=\0\377|G<\377QQQ\377SSS\377VVV\377]]]\377hhh\377www\377\205" - "\205\205\377\221\221\221\377fff\377NNN\377OOO\377PPP\377PPP\377\223\223\223" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\326\326\326\377\311\311\311\377\274\274\274" - "\377\241\241\241\377\206\206\206\377kkk\377]]]\377PPP\377PPP\377PPP\377\310" - "7\31\377\377Z\0\377\377o\0\377\377o\0\377\3779\0\377oH?\377MMM\377III\377" - "CCC\377fff\377\202\202\202\377\222\222\222\377\221\221\221\377\232\232\232" - "\377\253\253\253\377\275\275\275\377\315\315\315\377\330\330\330\377\337" - "\337\337\377\342\342\342\377\343\343\343\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\373" - "\373\373\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3778\16\357\377\215\0\377\377\224\0\377\377" - "\221\0\377\377\212\0\377\377\200\0\377\377w\0\377\377r\0\377\377p\0\377\377" - "o\0\377\377o\0\377\377o\0\377\377^\0\377\3235\24\377QQQ\377QQQ\377SSS\377" - "XXX\377aaa\377mmm\377|||\377\212\212\212\377\225\225\225\377\234\234\234" - "\377\237\237\237\377\240\240\240\377\241\241\241\377\241\241\241\377\206" - "\206\206\377kkk\377kkk\377kkk\377kkk\377kkk\377kkk\377kkk\377kkk\377kkk\377" - "kkk\377kkk\377kkk\377kkk\377kkk\377kkk\377\207_W\377\377?\0\377\377\223\0" - "\377\377\224\0\377\377\223\0\377\377\217\0\377\377\207\0\377\377|\0\377\377" - "t\0\377\377q\0\377\377o\0\377\377o\0\377\377o\0\377\377=\0\377|G<\377QQQ" - "\377RRR\377UUU\377\\\\\\\377fff\377ttt\377\203\203\203\377\220\220\220\377" - "fff\377NNN\377OOO\377PPP\377PPP\377\241\241\241\377\326\326\326\377\311\311" - "\311\377\274\274\274\377\241\241\241\377\223\223\223\377\206\206\206\377" - "kkk\377]]]\377PPP\377PPP\377PPP\377PPP\377PPP\377PPP\377PPP\377[NK\377\377" - "0\0\377\377o\0\377\377o\0\377\377b\0\377\3363\17\377NNN\377XXX\377\203\203" - "\203\377\244\244\244\377\250\250\250\377\230\230\230\377\221\221\221\377" - "\224\224\224\377\240\240\240\377\261\261\261\377\304\304\304\377\322\322" - "\322\377\333\333\333\377\340\340\340\377\342\342\342\377\343\343\343\377" - "\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344" - "\344\377\344\344\344\377\373\373\373\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377`>\277\377z\0" - "\377\377\224\0\377\377\221\0\377\377\213\0\377\377\201\0\377\377w\0\377\377" - "r\0\377\377p\0\377\377o\0\377\377o\0\377\377o\0\377\377^\0\377\3235\24\377" - "QQQ\377QQQ\377SSS\377XXX\377aaa\377mmm\377|||\377\212\212\212\377\225\225" - "\225\377\234\234\234\377\237\237\237\377\240\240\240\377\241\241\241\377" - "\241\241\241\377\241\241\241\377\241\241\241\377\223\223\223\377\206\206" - "\206\377kkk\377kkk\377kkk\377kkk\377kkk\377kkk\377kkk\377kkk\377kkk\377k" - "kk\377kkk\377kkk\377kkk\377\377,\0\377\377\223\0\377\377\224\0\377\377\223" - "\0\377\377\220\0\377\377\207\0\377\377}\0\377\377u\0\377\377q\0\377\377o" - "\0\377\377o\0\377\377o\0\377\377=\0\377r=2\377CCC\377DDD\377FFF\377KKK\377" - "TTT\377___\377lll\377www\377XXX\377NNN\377OOO\377PPP\377PPP\377]]]\377]]" - "]\377PPP\377PPP\377PPP\377PPP\377PPP\377PPP\377PPP\377PPP\377PPP\377PPP\377" - "PPP\377PPP\377PPP\377PPP\377\222B2\377\377E\0\377\377o\0\377\377o\0\377\377" - "I\0\377\272]J\377\250\250\250\377\307\307\307\377\306\306\306\377\264\264" - "\264\377\242\242\242\377\224\224\224\377\221\221\221\377\227\227\227\377" - "\246\246\246\377\270\270\270\377\311\311\311\377\327\327\327\377\336\336" - "\336\377\341\341\341\377\343\343\343\377\344\344\344\377\344\344\344\377" - "\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344" - "\344\377\373\373\373\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377mN\257\377s\0\377\377\224\0\377" - "\377\222\0\377\377\213\0\377\377\201\0\377\377x\0\377\377s\0\377\377p\0\377" - "\377o\0\377\377o\0\377\377o\0\377\377o\0\377\377,\0\377QQQ\377QQQ\377SSS" - "\377XXX\377```\377mmm\377{{{\377\212\212\212\377\224\224\224\377\233\233" - "\233\377\237\237\237\377\240\240\240\377\241\241\241\377\241\241\241\377" - "\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\223\223" - "\223\377\223\223\223\377\206\206\206\377kkk\377kkk\377kkk\377kkk\377kkk\377" - "kkk\377kkk\377kkk\377kkk\377kkk\377\377,\0\377\377\223\0\377\377\224\0\377" - "\377\224\0\377\377\221\0\377\377\210\0\377\377~\0\377\377u\0\377\377q\0\377" - "\377p\0\377\377o\0\377\377o\0\377\3779\0\377[3+\377666\377666\377888\377" - "<<<\377BBB\377KKK\377UUU\377^^^\377KKK\377NNN\377OOO\377PPP\377PPP\377PP" - "P\377PPP\377PPP\377PPP\377PPP\377PPP\377PPP\377PPP\377PPP\377PPP\377PPP\377" - "PPP\377PPP\377PPP\377PPP\377PPP\377\3235\24\377\377^\0\377\377o\0\377\377" - "o\0\377\3770\0\377\342\325\322\377\332\332\332\377\317\317\317\377\277\277" - "\277\377\255\255\255\377\234\234\234\377\222\222\222\377\222\222\222\377" - "\234\234\234\377\255\255\255\377\277\277\277\377\317\317\317\377\331\331" - "\331\377\340\340\340\377\342\342\342\377\343\343\343\377\344\344\344\377" - "\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344" - "\344\377\344\344\344\377\373\373\373\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\223}\200\377" - "`\0\377\377\224\0\377\377\222\0\377\377\214\0\377\377\202\0\377\377x\0\377" - "\377r\0\377\377p\0\377\377o\0\377\377o\0\377\377o\0\377\377o\0\377\3770\0" - "\377\\OL\377QQQ\377SSS\377XXX\377```\377lll\377zzz\377\211\211\211\377\224" - "\224\224\377\233\233\233\377\236\236\236\377\240\240\240\377\241\241\241" - "\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241" - "\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241" - "\377\223\223\223\377\206\206\206\377xxx\377kkk\377kkk\377kkk\377kkk\377k" - "kk\377kkk\377\377,\0\377\377\223\0\377\377\224\0\377\377\224\0\377\377\221" - "\0\377\377\211\0\377\377~\0\377\377v\0\377\377q\0\377\377p\0\377\377o\0\377" - "\377o\0\377\377,\0\377555\377666\377666\377888\377;;;\377AAA\377JJJ\377T" - "TT\377]]]\377KKK\377NNN\377OOO\377PPP\377PPP\377PPP\377PPP\377PPP\377PPP" - "\377PPP\377PPP\377PPP\377PPP\377PPP\377PPP\377PPP\377PPP\377PPP\377]]]\377" - "kkk\377\241\206\201\377\3774\0\377\377o\0\377\377o\0\377\377Z\0\377\366e" - "G\377\336\336\336\377\327\327\327\377\312\312\312\377\271\271\271\377\247" - "\247\247\377\230\230\230\377\221\221\221\377\225\225\225\377\242\242\242" - "\377\264\264\264\377\306\306\306\377\323\323\323\377\334\334\334\377\340" - "\340\340\377\343\343\343\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\373\373\373\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\274\254P\377M\0\377\377" - "\224\0\377\377\222\0\377\377\214\0\377\377\202\0\377\377y\0\377\377s\0\377" - "\377p\0\377\377o\0\377\377o\0\377\377o\0\377\377o\0\377\377=\0\377|G<\377" - "QQQ\377SSS\377WWW\377___\377kkk\377zzz\377\210\210\210\377\224\224\224\377" - "\233\233\233\377\236\236\236\377\240\240\240\377\240\240\240\377\241\241" - "\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377" - "\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241" - "\241\377\241\241\241\377\241\241\241\377\223\223\223\377\223\223\223\377" - "\206\206\206\377\206\206\206\377xxx\377xxx\377\377,\0\377\377\223\0\377\377" - "\224\0\377\377\224\0\377\377\221\0\377\377\211\0\377\377\177\0\377\377v\0" - "\377\377q\0\377\377p\0\377\377o\0\377\377o\0\377\377,\0\377555\377666\377" - "666\377888\377;;;\377AAA\377III\377TTT\377]]]\377JJJ\377MMM\377OOO\377PP" - "P\377PPP\377PPP\377PPP\377PPP\377PPP\377PPP\377PPP\377PPP\377PPP\377PPP\377" - "kkk\377\206\206\206\377\241\241\241\377\274\274\274\377\311\311\311\377\344" - "\344\344\377\360\223\200\377\377I\0\377\377o\0\377\377o\0\377\377A\0\377" - "\352\250\232\377\334\334\334\377\323\323\323\377\305\305\305\377\263\263" - "\263\377\241\241\241\377\224\224\224\377\222\222\222\377\231\231\231\377" - "\250\250\250\377\272\272\272\377\313\313\313\377\327\327\327\377\337\337" - "\337\377\342\342\342\377\343\343\343\377\344\344\344\377\344\344\344\377" - "\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344" - "\344\377\344\344\344\377\373\373\373\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\324\3110\377" - "@\0\377\377\224\0\377\377\222\0\377\377\215\0\377\377\204\0\377\377z\0\377" - "\377s\0\377\377p\0\377\377o\0\377\377o\0\377\377o\0\377\377o\0\377\377I\0" - "\377\235@-\377QQQ\377SSS\377VVV\377^^^\377jjj\377yyy\377\207\207\207\377" - "\223\223\223\377\233\233\233\377\236\236\236\377\240\240\240\377\240\240" - "\240\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377" - "\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241" - "\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377" - "\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\223\223" - "\223\377\377,\0\377\377\223\0\377\377\224\0\377\377\224\0\377\377\221\0\377" - "\377\211\0\377\377~\0\377\377v\0\377\377q\0\377\377p\0\377\377o\0\377\377" - "b\0\377\331.\12\377555\377666\377666\377777\377;;;\377AAA\377III\377SSS\377" - "\\\\\\\377JJJ\377MMM\377OOO\377PPP\377PPP\377PPP\377kkk\377kkk\377\206\206" - "\206\377\223\223\223\377\241\241\241\377\256\256\256\377\274\274\274\377" - "\311\311\311\377\326\326\326\377\344\344\344\377\344\344\344\377\344\344" - "\344\377\344\344\344\377\344\344\344\377\374C\35\377\377g\0\377\377o\0\377" - "\377k\0\377\3757\16\377\340\340\340\377\331\331\331\377\317\317\317\377\276" - "\276\276\377\255\255\255\377\234\234\234\377\223\223\223\377\224\224\224" - "\377\236\236\236\377\257\257\257\377\301\301\301\377\320\320\320\377\332" - "\332\332\377\340\340\340\377\342\342\342\377\343\343\343\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\344\344\344\377\373\373\373\377\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\377,\0\377\377\224\0\377\377\223\0\377\377\216\0\377\377\206" - "\0\377\377|\0\377\377t\0\377\377q\0\377\377p\0\377\377o\0\377\377o\0\377" - "\377o\0\377\377R\0\377\262<#\377QQQ\377SSS\377VVV\377]]]\377iii\377www\377" - "\206\206\206\377\222\222\222\377\232\232\232\377\236\236\236\377\240\240" - "\240\377\240\240\240\377\241\241\241\377\241\241\241\377\241\241\241\377" - "\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241" - "\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377" - "\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241" - "\241\377\241\241\241\377\377,\0\377\377\223\0\377\377\224\0\377\377\224\0" - "\377\377\221\0\377\377\211\0\377\377~\0\377\377v\0\377\377q\0\377\377p\0" - "\377\377o\0\377\377^\0\377\3202\21\377CCC\377CCC\377DDD\377EEE\377JJJ\377" - "QQQ\377[[[\377hhh\377ttt\377VVV\377MMM\377OOO\377PPP\377PPP\377\223\223\223" - "\377\326\326\326\377\326\326\326\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\351" - "\301\271\377\3779\0\377\377o\0\377\377o\0\377\377R\0\377\362{c\377\336\336" - "\336\377\327\327\327\377\311\311\311\377\270\270\270\377\246\246\246\377" - "\230\230\230\377\222\222\222\377\226\226\226\377\244\244\244\377\266\266" - "\266\377\307\307\307\377\325\325\325\377\335\335\335\377\341\341\341\377" - "\343\343\343\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344" - "\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377" - "\344\344\344\377\373\373\373\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377`>\277\377z\0" - "\377\377\223\0\377\377\220\0\377\377\210\0\377\377\177\0\377\377v\0\377\377" - "r\0\377\377p\0\377\377o\0\377\377o\0\377\377o\0\377\377b\0\377\3363\17\377" - "QQQ\377SSS\377VVV\377]]]\377hhh\377vvv\377\205\205\205\377\221\221\221\377" - "\231\231\231\377\236\236\236\377\240\240\240\377\240\240\240\377\241\241" - "\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377" - "\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241" - "\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377" - "\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\377,\0\377" - "\377\224\0\377\377\224\0\377\377\224\0\377\377\220\0\377\377\210\0\377\377" - "}\0\377\377u\0\377\377q\0\377\377o\0\377\377o\0\377\377N\0\377\250>(\377" - "PPP\377QQQ\377QQQ\377SSS\377XXX\377aaa\377nnn\377}}}\377\213\213\213\377" - "ccc\377MMM\377OOO\377PPP\377PPP\377\223\223\223\377\344\344\344\377\344\344" - "\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377" - "\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344" - "\344\377\344\344\344\377\344\344\344\377\363}d\377\377R\0\377\377o\0\377" - "\377o\0\377\3779\0\377\346\276\266\377\334\334\334\377\322\322\322\377\304" - "\304\304\377\262\262\262\377\240\240\240\377\224\224\224\377\223\223\223" - "\377\233\233\233\377\253\253\253\377\275\275\275\377\315\315\315\377\330" - "\330\330\377\337\337\337\377\342\342\342\377\343\343\343\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\373\373\373" - "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\223}\200\377`\0\377\377\224\0\377\377\222" - "\0\377\377\214\0\377\377\202\0\377\377y\0\377\377s\0\377\377p\0\377\377p" - "\0\377\377o\0\377\377o\0\377\377o\0\377\377,\0\377QQQ\377RRR\377UUU\377\\" - "\\\\\377fff\377uuu\377\203\203\203\377\220\220\220\377\231\231\231\377\236" - "\236\236\377\240\240\240\377\240\240\240\377\241\241\241\377\241\241\241" - "\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241" - "\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241" - "\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241" - "\241\241\377\241\241\241\377\241\241\241\377\377,\0\377\377\223\0\377\377" - "\224\0\377\377\223\0\377\377\220\0\377\377\207\0\377\377|\0\377\377u\0\377" - "\377q\0\377\377o\0\377\377o\0\377\377E\0\377\223C3\377PPP\377QQQ\377QQQ\377" - "SSS\377XXX\377aaa\377nnn\377}}}\377\213\213\213\377ccc\377MMM\377OOO\377" - "PPP\377PPP\377\223\223\223\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\3758\16\377\377k\0\377\377o\0\377\377b\0\377\372N+\377" - "\340\340\340\377\331\331\331\377\316\316\316\377\276\276\276\377\254\254" - "\254\377\234\234\234\377\223\223\223\377\224\224\224\377\240\240\240\377" - "\261\261\261\377\303\303\303\377\321\321\321\377\333\333\333\377\340\340" - "\340\377\342\342\342\377\343\343\343\377\344\344\344\377\344\344\344\377" - "\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344" - "\344\377\344\344\344\377\344\344\344\377\373\373\373\377\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\377\324\3110\377@\0\377\377\224\0\377\377\223\0\377\377\217\0\377" - "\377\207\0\377\377}\0\377\377u\0\377\377q\0\377\377p\0\377\377o\0\377\377" - "o\0\377\377o\0\377\377=\0\377}H=\377RRR\377UUU\377[[[\377eee\377sss\377\201" - "\201\201\377\217\217\217\377\230\230\230\377\235\235\235\377\240\240\240" - "\377\240\240\240\377\241\241\241\377\241\241\241\377\241\241\241\377\241" - "\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241" - "\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241" - "\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241" - "\377\255\222\215\377\3779\0\377\377\224\0\377\377\224\0\377\377\223\0\377" - "\377\217\0\377\377\206\0\377\377|\0\377\377t\0\377\377p\0\377\377o\0\377" - "\377o\0\377\3779\0\377rJB\377PPP\377QQQ\377QQQ\377TTT\377YYY\377bbb\377o" - "oo\377~~~\377\214\214\214\377ddd\377NNN\377OOO\377PPP\377PPP\377\206\206" - "\206\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377" - "\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344" - "\344\377\344\344\344\377\344\344\344\377\344\344\344\377\354\252\234\377" - "\377A\0\377\377o\0\377\377o\0\377\377I\0\377\356\222~\377\336\336\336\377" - "\326\326\326\377\310\310\310\377\267\267\267\377\245\245\245\377\227\227" - "\227\377\223\223\223\377\230\230\230\377\246\246\246\377\270\270\270\377" - "\311\311\311\377\326\326\326\377\336\336\336\377\341\341\341\377\343\343" - "\343\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377" - "\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344" - "\344\377\344\344\344\377\373\373\373\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\3778\16\357\377\215\0\377\377\224\0\377\377\221\0\377\377\213\0\377\377" - "\202\0\377\377x\0\377\377s\0\377\377p\0\377\377p\0\377\377o\0\377\377o\0" - "\377\377R\0\377\263<$\377QQQ\377TTT\377ZZZ\377ccc\377ppp\377\200\200\200" - "\377\215\215\215\377\227\227\227\377\235\235\235\377\237\237\237\377\240" - "\240\240\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241" - "\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241" - "\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241" - "\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\271" - "\204y\377\377E\0\377\377\224\0\377\377\224\0\377\377\223\0\377\377\216\0" - "\377\377\205\0\377\377z\0\377\377s\0\377\377p\0\377\377o\0\377\377k\0\377" - "\364.\5\377QQQ\377PPP\377QQQ\377QQQ\377TTT\377ZZZ\377bbb\377ppp\377\177\177" - "\177\377\215\215\215\377~~~\377NNN\377OOO\377PPP\377PPP\377kkk\377\344\344" - "\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377" - "\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344" - "\344\377\344\344\344\377\344\344\344\377\367fH\377\377Z\0\377\377o\0\377" - "\377o\0\377\3770\0\377\342\325\322\377\333\333\333\377\321\321\321\377\302" - "\302\302\377\260\260\260\377\237\237\237\377\224\224\224\377\224\224\224" - "\377\234\234\234\377\255\255\255\377\276\276\276\377\317\317\317\377\331" - "\331\331\377\340\340\340\377\342\342\342\377\343\343\343\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\373\373\373\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377y^\237\377m\0\377" - "\377\224\0\377\377\223\0\377\377\216\0\377\377\206\0\377\377}\0\377\377u" - "\0\377\377q\0\377\377p\0\377\377o\0\377\377o\0\377\377b\0\377\3363\17\377" - "QQQ\377TTT\377YYY\377bbb\377nnn\377}}}\377\213\213\213\377\226\226\226\377" - "\234\234\234\377\237\237\237\377\240\240\240\377\241\241\241\377\241\241" - "\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377" - "\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241" - "\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377" - "\241\241\241\377\241\241\241\377\271\204y\377\377F\0\377\377\224\0\377\377" - "\224\0\377\377\223\0\377\377\215\0\377\377\203\0\377\377y\0\377\377s\0\377" - "\377p\0\377\377o\0\377\377Z\0\377\3108\31\377QQQ\377PPP\377QQQ\377QQQ\377" - "UUU\377ZZZ\377ddd\377rrr\377\200\200\200\377\216\216\216\377~~~\377NNN\377" - "OOO\377PPP\377PPP\377kkk\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\346\330\326" - "\377\3770\0\377\377o\0\377\377o\0\377\377Z\0\377\366eG\377\337\337\337\377" - "\330\330\330\377\315\315\315\377\274\274\274\377\252\252\252\377\233\233" - "\233\377\223\223\223\377\225\225\225\377\242\242\242\377\264\264\264\377" - "\305\305\305\377\323\323\323\377\334\334\334\377\340\340\340\377\343\343" - "\343\377\343\343\343\377\344\344\344\377\344\344\344\377\344\344\344\377" - "\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344" - "\344\377\344\344\344\377\344\344\344\377\373\373\373\377\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\377\274\254P\377M\0\377\377\224\0\377\377\224\0\377\377" - "\221\0\377\377\213\0\377\377\201\0\377\377y\0\377\377s\0\377\377p\0\377\377" - "p\0\377\377o\0\377\377o\0\377\3774\0\377gLG\377SSS\377XXX\377```\377lll\377" - "zzz\377\211\211\211\377\224\224\224\377\233\233\233\377\236\236\236\377\240" - "\240\240\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241" - "\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241" - "\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241" - "\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\312" - "nZ\377\377Y\0\377\377\224\0\377\377\224\0\377\377\221\0\377\377\213\0\377" - "\377\200\0\377\377x\0\377\377r\0\377\377p\0\377\377o\0\377\377E\0\377\223" - "C3\377QQQ\377PPP\377QQQ\377RRR\377UUU\377[[[\377eee\377ttt\377\202\202\202" - "\377\217\217\217\377\177\177\177\377NNN\377OOO\377PPP\377PPP\377]]]\377\326" - "\326\326\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\360\223\200\377\377I\0\377\377o\0\377\377o\0" - "\377\377A\0\377\352\250\232\377\335\335\335\377\324\324\324\377\306\306\306" - "\377\266\266\266\377\244\244\244\377\227\227\227\377\223\223\223\377\232" - "\232\232\377\250\250\250\377\272\272\272\377\313\313\313\377\327\327\327" - "\377\337\337\337\377\341\341\341\377\343\343\343\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\373\373\373\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377" - "8\16\357\377\215\0\377\377\224\0\377\377\223\0\377\377\216\0\377\377\206" - "\0\377\377}\0\377\377u\0\377\377q\0\377\377p\0\377\377o\0\377\377o\0\377" - "\377I\0\377\235A-\377SSS\377VVV\377^^^\377jjj\377xxx\377\206\206\206\377" - "\222\222\222\377\232\232\232\377\236\236\236\377\240\240\240\377\240\240" - "\240\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377" - "\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241" - "\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377" - "\241\241\241\377\241\241\241\377\241\241\241\377\320fP\377\377`\0\377\377" - "\224\0\377\377\223\0\377\377\217\0\377\377\207\0\377\377}\0\377\377v\0\377" - "\377q\0\377\377p\0\377\377o\0\377\3770\0\377\\OL\377QQQ\377PPP\377QQQ\377" - "RRR\377VVV\377\\\\\\\377ggg\377uuu\377\204\204\204\377\221\221\221\377\214" - "\214\214\377NNN\377OOO\377PPP\377PPP\377PPP\377\311\311\311\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\372O+\377\377b\0\377\377o\0\377\377k\0\377\3757\16\377\340\340\340\377" - "\332\332\332\377\320\320\320\377\301\301\301\377\256\256\256\377\236\236" - "\236\377\224\224\224\377\224\224\224\377\236\236\236\377\257\257\257\377" - "\301\301\301\377\320\320\320\377\332\332\332\377\340\340\340\377\342\342" - "\342\377\343\343\343\377\344\344\344\377\344\344\344\377\344\344\344\377" - "\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344" - "\344\377\344\344\344\377\344\344\344\377\344\344\344\377\373\373\373\377" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\223}\200\377`\0\377\377\224" - "\0\377\377\224\0\377\377\221\0\377\377\212\0\377\377\201\0\377\377x\0\377" - "\377s\0\377\377p\0\377\377p\0\377\377o\0\377\377b\0\377\3363\17\377RRR\377" - "VVV\377\\\\\\\377hhh\377uuu\377\203\203\203\377\220\220\220\377\231\231\231" - "\377\236\236\236\377\240\240\240\377\240\240\240\377\241\241\241\377\241" - "\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241" - "\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241" - "\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241" - "\377\241\241\241\377\342Q3\377\377s\0\377\377\224\0\377\377\221\0\377\377" - "\214\0\377\377\203\0\377\377y\0\377\377t\0\377\377p\0\377\377o\0\377\377" - "Z\0\377\3119\32\377QQQ\377QQQ\377PPP\377QQQ\377SSS\377VVV\377]]]\377iii\377" - "www\377\206\206\206\377\222\222\222\377\232\232\232\377[[[\377OOO\377PPP" - "\377PPP\377PPP\377\274\274\274\377\344\344\344\377\344\344\344\377\344\344" - "\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377" - "\344\344\344\377\344\344\344\377\351\301\271\377\3779\0\377\377o\0\377\377" - "o\0\377\377R\0\377\362{c\377\337\337\337\377\327\327\327\377\313\313\313" - "\377\272\272\272\377\250\250\250\377\232\232\232\377\223\223\223\377\227" - "\227\227\377\245\245\245\377\266\266\266\377\307\307\307\377\325\325\325" - "\377\335\335\335\377\341\341\341\377\343\343\343\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\373\373\373\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\377\337\327\40\3779\0\377\377\224\0\377\377\224\0\377\377\223" - "\0\377\377\216\0\377\377\206\0\377\377}\0\377\377u\0\377\377q\0\377\377p" - "\0\377\377o\0\377\377o\0\377\3779\0\377sKC\377UUU\377[[[\377ddd\377rrr\377" - "\201\201\201\377\216\216\216\377\227\227\227\377\235\235\235\377\237\237" - "\237\377\240\240\240\377\241\241\241\377\241\241\241\377\241\241\241\377" - "\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241" - "\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377" - "\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\355B\36" - "\377\377\200\0\377\377\223\0\377\377\217\0\377\377\207\0\377\377~\0\377\377" - "w\0\377\377r\0\377\377p\0\377\377o\0\377\377A\0\377\212G:\377QQQ\377QQQ\377" - "QQQ\377QQQ\377SSS\377WWW\377___\377kkk\377zzz\377\210\210\210\377\224\224" - "\224\377\233\233\233\377iii\377PPP\377PPP\377PPP\377PPP\377\241\241\241\377" - "\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344" - "\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377" - "\363}d\377\377R\0\377\377o\0\377\377o\0\377\3779\0\377\346\276\266\377\334" - "\334\334\377\323\323\323\377\305\305\305\377\264\264\264\377\242\242\242" - "\377\226\226\226\377\224\224\224\377\234\234\234\377\253\253\253\377\275" - "\275\275\377\315\315\315\377\330\330\330\377\337\337\337\377\342\342\342" - "\377\343\343\343\377\344\344\344\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\373" - "\373\373\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\373w\\\242\377" - "m\0\377\377\224\0\377\377\224\0\377\377\221\0\377\377\213\0\377\377\201\0" - "\377\377y\0\377\377s\0\377\377p\0\377\377p\0\377\377o\0\377\377V\0\377\275" - ":\36\377TTT\377YYY\377bbb\377nnn\377}}}\377\213\213\213\377\225\225\225\377" - "\234\234\234\377\237\237\237\377\240\240\240\377\241\241\241\377\241\241" - "\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377" - "\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241" - "\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377" - "\241\241\241\377\377,\0\377\377\224\0\377\377\222\0\377\377\214\0\377\377" - "\203\0\377\377z\0\377\377t\0\377\377q\0\377\377o\0\377\377g\0\377\3522\13" - "\377TTT\377QQQ\377QQQ\377QQQ\377QQQ\377TTT\377YYY\377aaa\377nnn\377|||\377" - "\212\212\212\377\225\225\225\377\234\234\234\377jjj\377PPP\377PPP\377PPP" - "\377PPP\377\206\206\206\377\344\344\344\377\344\344\344\377\344\344\344\377" - "\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344" - "\344\377\344\344\344\377\3758\16\377\377k\0\377\377o\0\377\377b\0\377\372" - "N+\377\340\340\340\377\331\331\331\377\317\317\317\377\276\276\276\377\255" - "\255\255\377\234\234\234\377\224\224\224\377\225\225\225\377\240\240\240" - "\377\261\261\261\377\303\303\303\377\321\321\321\377\333\333\333\377\340" - "\340\340\377\342\342\342\377\343\343\343\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\373\373\373\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\367\333\333$\3779\0\377\377\224\0\377\377\224\0\377\377\223" - "\0\377\377\216\0\377\377\206\0\377\377}\0\377\377u\0\377\377q\0\377\377p" - "\0\377\377o\0\377\377k\0\377\3652\5\377^QN\377XXX\377___\377kkk\377yyy\377" - "\210\210\210\377\223\223\223\377\232\232\232\377\236\236\236\377\240\240" - "\240\377\240\240\240\377\241\241\241\377\241\241\241\377\241\241\241\377" - "\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241" - "\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377" - "\241\241\241\377\241\241\241\377\271\204y\377\377F\0\377\377\223\0\377\377" - "\220\0\377\377\210\0\377\377\177\0\377\377w\0\377\377r\0\377\377p\0\377\377" - "o\0\377\377N\0\377\254B,\377SSS\377QQQ\377QQQ\377QQQ\377RRR\377UUU\377ZZ" - "Z\377ddd\377rrr\377\200\200\200\377\215\215\215\377\227\227\227\377\235\235" - "\235\377\204\204\204\377PPP\377PPP\377PPP\377PPP\377kkk\377\326\326\326\377" - "\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344" - "\344\377\344\344\344\377\344\344\344\377\354\252\234\377\377A\0\377\377o" - "\0\377\377o\0\377\377I\0\377\356\222~\377\336\336\336\377\326\326\326\377" - "\311\311\311\377\270\270\270\377\246\246\246\377\230\230\230\377\224\224" - "\224\377\230\230\230\377\246\246\246\377\270\270\270\377\311\311\311\377" - "\326\326\326\377\336\336\336\377\341\341\341\377\343\343\343\377\344\344" - "\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377" - "\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344" - "\344\377\344\344\344\377\344\344\344\377\344\344\344\377\373\373\373\377" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\277\277\277\4\373x]\243" - "\377m\0\377\377\224\0\377\377\224\0\377\377\221\0\377\377\213\0\377\377\202" - "\0\377\377y\0\377\377t\0\377\377p\0\377\377p\0\377\377o\0\377\377N\0\377" - "\251?)\377VVV\377]]]\377hhh\377uuu\377\204\204\204\377\220\220\220\377\231" - "\231\231\377\235\235\235\377\240\240\240\377\240\240\240\377\241\241\241" - "\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241" - "\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241" - "\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\320" - "fP\377\377`\0\377\377\222\0\377\377\215\0\377\377\204\0\377\377{\0\377\377" - "t\0\377\377q\0\377\377o\0\377\377k\0\377\3663\6\377bUR\377SSS\377QQQ\377" - "QQQ\377QQQ\377SSS\377VVV\377]]]\377ggg\377uuu\377\203\203\203\377\220\220" - "\220\377\231\231\231\377\235\235\235\377\222\222\222\377PPP\377PPP\377PP" - "P\377PPP\377PPP\377\311\311\311\377\344\344\344\377\344\344\344\377\344\344" - "\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377" - "\367fH\377\377Z\0\377\377o\0\377\377o\0\377\3770\0\377\342\325\322\377\333" - "\333\333\377\322\322\322\377\303\303\303\377\261\261\261\377\240\240\240" - "\377\225\225\225\377\224\224\224\377\234\234\234\377\255\255\255\377\276" - "\276\276\377\317\317\317\377\331\331\331\377\340\340\340\377\342\342\342" - "\377\343\343\343\377\344\344\344\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\373\373\373\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\252\252\252\3\370\336\327'\3779\0\377\377\224\0\377\377\224\0\377\377" - "\223\0\377\377\217\0\377\377\207\0\377\377~\0\377\377w\0\377\377r\0\377\377" - "p\0\377\377o\0\377\377k\0\377\3652\5\377`RP\377[[[\377ddd\377qqq\377\200" - "\200\200\377\215\215\215\377\226\226\226\377\234\234\234\377\237\237\237" - "\377\240\240\240\377\241\241\241\377\241\241\241\377\241\241\241\377\241" - "\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241" - "\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241" - "\241\241\377\241\241\241\377\347I(\377\377z\0\377\377\221\0\377\377\212\0" - "\377\377\200\0\377\377x\0\377\377s\0\377\377p\0\377\377o\0\377\377N\0\377" - "\257E/\377WWW\377SSS\377QQQ\377QQQ\377QQQ\377SSS\377XXX\377___\377kkk\377" - "yyy\377\207\207\207\377\222\222\222\377\232\232\232\377\236\236\236\377\222" - "\222\222\377]]]\377PPP\377PPP\377PPP\377PPP\377\274\274\274\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\347\315\307\377\3774\0\377\377o\0\377\377o\0\377\377Z\0\377" - "\366eG\377\337\337\337\377\330\330\330\377\315\315\315\377\275\275\275\377" - "\253\253\253\377\234\234\234\377\224\224\224\377\226\226\226\377\242\242" - "\242\377\264\264\264\377\305\305\305\377\323\323\323\377\334\334\334\377" - "\340\340\340\377\343\343\343\377\343\343\343\377\344\344\344\377\344\344" - "\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377" - "\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344" - "\344\377\344\344\344\377\344\344\344\377\373\373\373\377\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\177\177\177\2\324\324\324\6\371\220y\210" - "\377`\0\377\377\224\0\377\377\224\0\377\377\222\0\377\377\214\0\377\377\204" - "\0\377\377{\0\377\377u\0\377\377r\0\377\377p\0\377\377o\0\377\377N\0\377" - "\252@*\377XXX\377aaa\377mmm\377{{{\377\210\210\210\377\224\224\224\377\233" - "\233\233\377\236\236\236\377\240\240\240\377\240\240\240\377\241\241\241" - "\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241" - "\241\241\377\241\241\241\377\241\241\241\377\241\241\241\377\241\241\241" - "\377\241\241\241\377\241\241\241\377\247\232\227\377\3773\0\377\377\223\0" - "\377\377\217\0\377\377\207\0\377\377}\0\377\377u\0\377\377q\0\377\377p\0" - "\377\377g\0\377\3544\15\377^^^\377VVV\377SSS\377QQQ\377QQQ\377RRR\377UUU" - "\377ZZZ\377bbb\377ooo\377~~~\377\213\213\213\377\225\225\225\377\233\233" - "\233\377\237\237\237\377\240\240\240\377kkk\377PPP\377PPP\377PPP\377PPP\377" - "\223\223\223\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344" - "\344\377\344\344\344\377\344\344\344\377\360\223\200\377\377I\0\377\377o" - "\0\377\377o\0\377\377A\0\377\352\250\232\377\335\335\335\377\325\325\325" - "\377\307\307\307\377\266\266\266\377\245\245\245\377\227\227\227\377\224" - "\224\224\377\232\232\232\377\250\250\250\377\273\273\273\377\313\313\313" - "\377\327\327\327\377\337\337\337\377\341\341\341\377\343\343\343\377\344" - "\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344" - "\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344" - "\377\373\373\373\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\1\277\277\277\4\365\342\342\33\374H\33\342\377\207\0\377\377\224\0\377" - "\377\223\0\377\377\220\0\377\377\212\0\377\377\201\0\377\377z\0\377\377t" - "\0\377\377q\0\377\377p\0\377\377k\0\377\3674\7\377xkh\377xxx\377\206\206" - "\206\377\227\227\227\377\251\251\251\377\270\270\270\377\303\303\303\377" - "\312\312\312\377\314\314\314\377\316\316\316\377\316\316\316\377\316\316" - "\316\377\316\316\316\377\316\316\316\377\316\316\316\377\316\316\316\377" - "\316\316\316\377\316\316\316\377\316\316\316\377\316\316\316\377\316\316" - "\316\377\316\316\316\377\341\221\201\377\377S\0\377\377\222\0\377\377\214" - "\0\377\377\202\0\377\377y\0\377\377s\0\377\377p\0\377\377o\0\377\377A\0\377" - "\254i\\\377www\377nnn\377jjj\377hhh\377hhh\377jjj\377nnn\377www\377\204\204" - "\204\377\225\225\225\377\246\246\246\377\267\267\267\377\302\302\302\377" - "\311\311\311\377\314\314\314\377\316\316\316\377\247\247\247\377PPP\377P" - "PP\377PPP\377PPP\377kkk\377\373\373\373\377\373\373\373\377\373\373\373\377" - "\373\373\373\377\373\373\373\377\373\373\373\377\376F\37\377\377g\0\377\377" - "o\0\377\377k\0\377\3779\20\377\366\366\366\377\360\360\360\377\345\345\345" - "\377\325\325\325\377\301\301\301\377\256\256\256\377\243\243\243\377\243" - "\243\243\377\256\256\256\377\301\301\301\377\325\325\325\377\345\345\345" - "\377\360\360\360\377\366\366\366\377\371\371\371\377\372\372\372\377\373" - "\373\373\377\373\373\373\377\373\373\373\377\373\373\373\377\373\373\373" - "\377\373\373\373\377\373\373\373\377\373\373\373\377\373\373\373\377\373" - "\373\373\377\373\373\373\377\373\373\373\377\373\373\373\377\373\373\373" - "\377\373\373\373\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\1\252\252\252\3\337\337\337\10\365\301\267O\377F\0\377\377\224\0\377\377" - "\224\0\377\377\223\0\377\377\216\0\377\377\210\0\377\377\177\0\377\377x\0" - "\377\377s\0\377\377q\0\377\377p\0\377\377Z\0\377\330G)\372\217\217\217\336" - "\236\236\236\300\261\261\261\230\310\310\310k\334\334\334C\351\351\351$\360" - "\360\360\21\332\332\332\7\177\177\177\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377S.\317" - "\377\200\0\377\377\220\0\377\377\210\0\377\377~\0\377\377v\0\377\377r\0\377" - "\377p\0\377\377Z\0\377\350W9\333\241\241\241\271\220\220\220\333\206\206" - "\206\357\201\201\201\371\200\200\200\374\200\200\200\373\204\204\204\364" - "\213\213\213\346\227\227\227\315\250\250\250\251\276\276\276~\323\323\323" - "R\343\343\343.\363\363\363\26\342\342\342\11\252\252\252\3\0\0\0\1\277\277" - "\277\4PPP\377PPP\377PPP\377PPP\377PPP\377\277\277\277\4\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\377\307\273@\377=\0\377\377o\0\377\377o\0\377\377V\0\377\375" - "y]\241\351\351\351\14\355\355\355\35\337\337\3378\317\317\317\\\273\273\273" - "\205\252\252\252\246\244\244\244\264\250\250\250\253\267\267\267\216\310" - "\310\310g\333\333\333@\350\350\350\"\357\357\357\20\324\324\324\6\177\177" - "\177\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\177\177\177\2\314\314\314" - "\5\354\354\354\16\366\201g\235\377f\0\377\377\224\0\377\377\224\0\377\377" - "\222\0\377\377\215\0\377\377\206\0\377\377~\0\377\377w\0\377\377s\0\377\377" - "q\0\377\377p\0\377\377=\0\377\250sh\354\227\227\227\315\252\252\252\250\277" - "\277\277}\323\323\323R\343\343\343/\350\350\350\27\345\345\345\12\277\277" - "\277\4\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\377\307\273@\377F\0\377\377\222\0\377\377\215\0\377" - "\377\203\0\377\377z\0\377\377t\0\377\377q\0\377\377l\0\377\3739\13\366\267" - "\252\250\235\236\236\236\300\216\216\216\337\205\205\205\361\201\201\201" - "\372\200\200\200\374\201\201\201\371\206\206\206\357\217\217\217\335\236" - "\236\236\300\261\261\261\230\310\310\310l\334\334\334C\351\351\351$\360\360" - "\360\21\332\332\332\7\177\177\177\2\0\0\0\1\0\0\0\0jjj\224PPP\377PPP\377" - "PPP\377PPP\377\337\337\337\30\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377y^\237\377" - "V\0\377\377o\0\377\377o\0\377\3779\0\377\372\317\3136\360\360\360\21\352" - "\352\352%\332\332\332E\310\310\310l\264\264\264\223\247\247\247\256\244\244" - "\244\264\255\255\255\242\275\275\275\200\320\320\320W\341\341\3413\353\353" - "\353\32\347\347\347\13\277\277\277\4\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\1\252\252\252\3\345\345\345\12\350\350\350\27\372O+\330" - "\377\200\0\377\377\224\0\377\377\224\0\377\377\221\0\377\377\214\0\377\377" - "\205\0\377\377}\0\377\377w\0\377\377s\0\377\377p\0\377\377l\0\377\3675\7" - "\376\231\214\210\332\242\242\242\270\265\265\265\217\314\314\314d\335\335" - "\335=\347\347\347!\356\356\356\17\324\324\324\6\177\177\177\2\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377" - "`>\277\377y\0\377\377\217\0\377\377\210\0\377\377~\0\377\377w\0\377\377s" - "\0\377\377p\0\377\377=\0\377\322\235\223\225\256\256\256\237\231\231\231" - "\307\214\214\214\344\204\204\204\363\201\201\201\372\201\201\201\372\203" - "\203\203\365\212\212\212\350\224\224\224\321\246\246\246\257\273\273\273" - "\205\321\321\321Z\342\342\3425\354\354\354\33\351\351\351\14\277\277\277" - "\4\0\0\0\1\0\0\0\0\0\0\0\0\312\312\3121PPP\377PPP\377PPP\377PPP\377\245\245" - "\245X\0\0\0\0\0\0\0\0\0\0\0\0\377\357\337\20\3770\0\377\377o\0\377\377o\0" - "\377\377g\0\377\377E\36\337\345\345\345\12\351\351\351\30\344\344\3440\323" - "\323\323S\300\300\300{\256\256\256\237\243\243\243\263\246\246\246\260\261" - "\261\261\227\304\304\304q\330\330\330I\345\345\345(\361\361\361\23\337\337" - "\337\10\252\252\252\3\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\177\177\177\2\324\324\324\6\356\356\356\17\356\336\336/\374<\14\363" - "\377\215\0\377\377\224\0\377\377\223\0\377\377\221\0\377\377\214\0\377\377" - "\204\0\377\377}\0\377\377w\0\377\377s\0\377\377p\0\377\377_\0\377\342D#\370" - "\231\231\231\307\255\255\255\242\303\303\303w\327\327\327N\342\342\342-\363" - "\363\363\26\345\345\345\12\277\277\277\4\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\257\234`\377S\0\377\377\220" - "\0\377\377\212\0\377\377\202\0\377\377y\0\377\377t\0\377\377p\0\377\377J" - "\0\377\350\212x\234\277\277\277|\250\250\250\251\226\226\226\317\212\212" - "\212\350\203\203\203\365\201\201\201\372\202\202\202\370\206\206\206\357" - "\217\217\217\336\235\235\235\302\260\260\260\234\304\304\304q\330\330\330" - "I\346\346\346)\361\361\361\23\337\337\337\10\252\252\252\3\0\0\0\1\0\0\0" - "\0\0\0\0\0\277\277\277\4PPP\377PPP\377PPP\377PPP\377PPP\377\0\0\0\1\0\0\0" - "\0\0\0\0\0\377\241\215p\377I\0\377\377o\0\377\377o\0\377\377I\0\377\374\237" - "\213s\354\354\354\16\347\347\347\40\335\335\335<\313\313\313c\270\270\270" - "\212\250\250\250\251\243\243\243\265\250\250\250\251\270\270\270\212\315" - "\315\315b\335\335\335<\356\356\356\37\354\354\354\16\314\314\314\5\177\177" - "\177\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\277" - "\277\277\4\345\345\345\12\350\350\350\27\352\303\272U\374F\12\364\377\215" - "\0\377\377\224\0\377\377\223\0\377\377\221\0\377\377\213\0\377\377\204\0" - "\377\377}\0\377\377v\0\377\377s\0\377\377p\0\377\377V\0\377\326R7\357\244" - "\244\244\264\267\267\267\214\315\315\315a\335\335\335<\347\347\347\40\356" - "\356\356\17\324\324\324\6\177\177\177\2\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\377\357\337\20\377>\16\357\377\212\0\377\377\213\0" - "\377\377\203\0\377\377|\0\377\377u\0\377\377r\0\377\377V\0\377\363pU\263" - "\321\321\321Z\271\271\271\210\244\244\244\264\223\223\223\326\210\210\210" - "\354\203\203\203\366\202\202\202\370\204\204\204\364\211\211\211\347\226" - "\226\226\320\246\246\246\257\273\273\273\207\315\315\315]\337\337\3378\356" - "\356\356\36\353\353\353\15\314\314\314\5\177\177\177\2\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0jjj\224PPP\377PPP\377PPP\377PPP\377\332\332\332#\0\0\0\0\0" - "\0\0\0\377E\36\337\377g\0\377\377o\0\377\377o\0\377\3774\0\377\370\336\327" - "'\362\362\362\24\346\346\346*\331\331\331J\304\304\304r\261\261\261\230\245" - "\245\245\261\244\244\244\264\256\256\256\237\300\300\300{\323\323\323S\344" - "\344\3440\350\350\350\27\345\345\345\12\252\252\252\3\0\0\0\1\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\177\177\177\2\324\324" - "\324\6\356\356\356\17\347\347\347!\344\275\265a\374F\12\365\377\215\0\377" - "\377\224\0\377\377\223\0\377\377\221\0\377\377\213\0\377\377\204\0\377\377" - "|\0\377\377v\0\377\377r\0\377\377p\0\377\377V\0\377\331V:\351\254\254\254" - "\241\303\303\303w\325\325\325O\343\343\343.\351\351\351\30\347\347\347\13" - "\277\277\277\4\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\357\337" - "\20\377V,\317\377z\0\377\377\210\0\377\377\203\0\377\377|\0\377\377v\0\377" - "\377s\0\377\377V\0\377\367tY\253\336\336\336?\311\311\311h\263\263\263\225" - "\237\237\237\276\217\217\217\335\206\206\206\357\203\203\203\366\203\203" - "\203\365\207\207\207\355\220\220\220\333\236\236\236\277\261\261\261\232" - "\306\306\306p\330\330\330I\346\346\346*\362\362\362\24\342\342\342\11\252" - "\252\252\3\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\332\332\332#PPP\377PP" - "P\377PPP\377PPP\377jjj\224\0\0\0\0\377\274\254P\377A\0\377\377o\0\377\377" - "o\0\377\377Z\0\377\375lN\260\351\351\351\14\354\354\354\33\342\342\3425\321" - "\321\321Z\274\274\274\202\254\254\254\244\243\243\243\265\246\246\246\257" - "\264\264\264\224\310\310\310l\332\332\332E\352\352\352%\360\360\360\21\332" - "\332\332\7\177\177\177\2\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\277\277\277\4\345\345\345\12\363\363\363" - "\26\347\347\347,\336\266\257m\373F\11\366\377\215\0\377\377\224\0\377\377" - "\223\0\377\377\220\0\377\377\212\0\377\377\203\0\377\377{\0\377\377u\0\377" - "\377r\0\377\377p\0\377\377V\0\377\347I'\354\300\246\237\233\314\314\314d" - "\336\336\336?\351\351\351#\360\360\360\21\337\337\337\10\252\252\252\3\0" - "\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\377\357\337\20\377U,\317\377q\0\377\377\201" - "\0\377\377\177\0\377\377z\0\377\377v\0\377\377s\0\377\377V\0\377\372u[\247" - "\346\346\346*\326\326\326L\303\303\303w\254\254\254\243\231\231\231\311\214" - "\214\214\344\205\205\205\362\203\203\203\365\206\206\206\360\215\215\215" - "\342\230\230\230\312\250\250\250\251\274\274\274\202\321\321\321Y\342\342" - "\3426\355\355\355\35\353\353\353\15\314\314\314\5\177\177\177\2\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\277\277\277\4PPP\377PPP\377PPP\377PPP\377" - "PPP\377\342\342\342\11\377`>\277\377^\0\377\377o\0\377\377o\0\377\377E\0" - "\377\374\255\233d\360\360\360\21\351\351\351$\334\334\334B\307\307\307j\265" - "\265\265\221\246\246\246\255\243\243\243\266\251\251\251\247\272\272\272" - "\206\315\315\315]\337\337\3378\355\355\355\35\351\351\351\14\314\314\314" - "\5\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\1\177\177\177\2\324\324\324\6\354\354\354\16\356\356\356" - "\36\336\336\3367\330\260\252x\372:\12\367\377z\0\377\377\224\0\377\377\223" - "\0\377\377\220\0\377\377\211\0\377\377\202\0\377\377z\0\377\377u\0\377\377" - "r\0\377\377p\0\377\377^\0\377\372;\11\371\336t_\276\324\311\304`\341\341" - "\3414\354\354\354\34\354\354\354\16\324\324\324\6\177\177\177\2\0\0\0\1\0" - "\0\0\0\377\257\234`\377<\16\357\377h\0\377\377x\0\377\377x\0\377\377w\0\377" - "\377t\0\377\377r\0\377\377F\0\377\373w[\244\355\355\355\35\336\336\3367\317" - "\317\317\\\271\271\271\210\244\244\244\262\223\223\223\324\211\211\211\351" - "\205\205\205\362\205\205\205\361\211\211\211\347\223\223\223\324\243\243" - "\243\266\265\265\265\221\311\311\311i\331\331\331D\352\352\352&\361\361\361" - "\23\337\337\337\10\252\252\252\3\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0jjj\224PPP\377PPP\377PPP\377PPP\377\253\236\231b\3770\0\377" - "\377o\0\377\377o\0\377\377k\0\377\3778\16\357\345\345\345\12\350\350\350" - "\27\343\343\343/\322\322\322Q\300\300\300z\257\257\257\236\244\244\244\264" - "\244\244\244\264\257\257\257\235\303\303\303w\325\325\325O\342\342\342-\363" - "\363\363\26\342\342\342\11\252\252\252\3\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\252\252" - "\252\3\337\337\337\10\361\361\361\23\352\352\352&\334\334\334B\314\301\274" - "p\354N-\342\377Z\0\377\377\215\0\377\377\222\0\377\377\217\0\377\377\211" - "\0\377\377\200\0\377\377x\0\377\377s\0\377\377p\0\377\377p\0\377\377k\0\377" - "\377N\0\377\3739\13\366\357lP\272\361\226\201\210\365\300\263Q\367\302\270" - "H\373\270\254S\377\210o\220\377E\36\337\377F\0\377\377m\0\377\377r\0\377" - "\377s\0\377\377s\0\377\377r\0\377\377d\0\377\3779\0\377\372\254\233f\362" - "\362\362\24\345\345\345(\327\327\327G\305\305\305o\261\261\261\232\235\235" - "\235\301\217\217\217\335\210\210\210\354\206\206\206\360\211\211\211\352" - "\221\221\221\331\236\236\236\300\257\257\257\235\302\302\302v\325\325\325" - "P\344\344\3441\353\353\353\32\351\351\351\14\314\314\314\5\0\0\0\1\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\337\337\337\30PPP\377" - "PPP\377PPP\377PPP\377|G<\377\377=\0\377\377o\0\377\377o\0\377\377V\0\377" - "\375y]\241\354\354\354\16\356\356\356\37\335\335\335<\315\315\315a\270\270" - "\270\212\251\251\251\252\241\241\241\267\247\247\247\256\266\266\266\220" - "\311\311\311h\333\333\333A\351\351\351#\357\357\357\20\324\324\324\6\177" - "\177\177\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\177\177\177\2\314\314\314\5\347\347\347" - "\13\352\352\352\31\343\343\343.\326\326\326L\304\304\304q\322uc\305\371>" - "\10\373\377m\0\377\377\222\0\377\377\216\0\377\377\206\0\377\377}\0\377\377" - "u\0\377\377r\0\377\377p\0\377\377o\0\377\377o\0\377\377k\0\377\377V\0\377" - "\377I\0\377\377=\0\377\377=\0\377\377A\0\377\377R\0\377\377g\0\377\377o\0" - "\377\377p\0\377\377p\0\377\377p\0\377\377l\0\377\377N\0\377\377S/\320\372" - "\317\3136\356\356\356\17\356\356\356\37\337\337\3378\317\317\317[\273\273" - "\273\205\246\246\246\255\227\227\227\316\214\214\214\343\207\207\207\355" - "\211\211\211\352\217\217\217\335\233\233\233\306\251\251\251\247\275\275" - "\275\201\317\317\317\\\340\340\340:\347\347\347!\357\357\357\20\332\332\332" - "\7\252\252\252\3\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\\\\\\\242PPP\377PPP\377PPP\377qIA\377\3735\14\362\377,\0" - "\377\377,\0\377\375lN\260\363\350\350\27\362\362\362\24\346\346\346)\331" - "\331\331J\304\304\304r\261\261\261\230\244\244\244\262\241\241\241\267\253" - "\253\253\245\274\274\274\202\321\321\321Y\341\341\3414\354\354\354\33\347" - "\347\347\13\277\277\277\4\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\177\177" - "\177\2\324\324\324\6\356\356\356\17\356\356\356\36\342\342\3426\322\322\322" - "U\301\301\301y\272\237\231\252\332W;\347\3779\0\377\377k\0\377\377\212\0" - "\377\377\200\0\377\377x\0\377\377r\0\377\377p\0\377\377o\0\377\377o\0\377" - "\377o\0\377\377o\0\377\377o\0\377\377o\0\377\377o\0\377\377o\0\377\377o\0" - "\377\377o\0\377\377o\0\377\377o\0\377\377g\0\377\377N\0\377\377;\16\357\375" - "\222|\201\332\332\332\7\353\353\353\15\353\353\353\32\343\343\343/\327\327" - "\327M\303\303\303s\260\260\260\233\236\236\236\277\221\221\221\331\211\211" - "\211\347\212\212\212\350\217\217\217\336\230\230\230\312\246\246\246\255" - "\270\270\270\212\311\311\311e\334\334\334C\344\344\344'\362\362\362\25\342" - "\342\342\11\277\277\277\4\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\312\312\3121PPP\377PPP\377PPP\377PPP\377" - "PPP\377\0\0\0\1\0\0\0\1\277\277\277\4\351\351\351\14\354\354\354\33\342\342" - "\3425\321\321\321Y\274\274\274\202\253\253\253\245\241\241\241\267\243\243" - "\243\263\260\260\260\231\304\304\304r\331\331\331J\346\346\346)\362\362\362" - "\24\337\337\337\10\252\252\252\3\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\1\252\252\252\3\337\337\337\10\360\360\360\22\351\351\351#\335\335" - "\335<\317\317\317[\276\276\276\177\255\255\255\242\252\216\212\310\325Q6" - "\360\3772\0\377\377L\0\377\377[\0\377\377j\0\377\377p\0\377\377o\0\377\377" - "o\0\377\377o\0\377\377o\0\377\377o\0\377\377o\0\377\377o\0\377\377o\0\377" - "\377o\0\377\377g\0\377\377R\0\377\377A\0\377\377E\37\340\375\223}\202\363" - "\347\347\26\342\342\342\11\356\356\356\17\352\352\352\31\347\347\347+\332" - "\332\332E\310\310\310g\266\266\266\215\245\245\245\261\227\227\227\316\216" - "\216\216\340\214\214\214\344\217\217\217\336\230\230\230\314\245\245\245" - "\261\266\266\266\220\310\310\310l\330\330\330I\342\342\342-\352\352\352\31" - "\351\351\351\14\314\314\314\5\177\177\177\2\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1PPP\377PPP\377" - "PPP\377PPP\377PPP\377\272\272\272C\177\177\177\2\324\324\324\6\357\357\357" - "\20\351\351\351#\333\333\333A\311\311\311h\266\266\266\220\246\246\246\255" - "\242\242\242\270\250\250\250\253\267\267\267\213\313\313\313c\335\335\335" - "=\347\347\347\40\354\354\354\16\314\314\314\5\177\177\177\2\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\177\177\177\2\277\277\277\4\345\345\345" - "\12\362\362\362\25\344\344\344'\333\333\333@\316\316\316_\274\274\274\202" - "\254\254\254\243\235\235\235\301\231\214\210\332\265fV\361\320L1\372\356" - "5\17\376\3775\0\377\377=\0\377\377E\0\377\377N\0\377\377N\0\377\377N\0\377" - "\377N\0\377\377A\0\377\377=\0\377\3770\0\377\374D\35\343\371\202i\230\371" - "\266\250[\354\354\354\16\353\353\353\15\356\356\356\17\362\362\362\25\356" - "\356\356\36\342\342\342-\331\331\331D\315\315\315a\273\273\273\204\252\252" - "\252\246\234\234\234\304\221\221\221\327\216\216\216\337\220\220\220\333" - "\227\227\227\313\244\244\244\262\265\265\265\222\306\306\306p\327\327\327" - "N\344\344\3441\354\354\354\34\354\354\354\16\324\324\324\6\177\177\177\2" - "\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\271\271\271BPPP\377PPP\377PPP\377PPP\377\272\272" - "\272C\177\177\177\2\337\337\337\10\362\362\362\24\346\346\346*\326\326\326" - "K\303\303\303s\260\260\260\231\246\246\246\260\244\244\244\262\257\257\257" - "\236\300\300\300{\323\323\323S\344\344\3440\351\351\351\30\345\345\345\12" - "\277\277\277\4\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\1\177\177\177\2\314\314\314\5\351\351\351\14\350\350\350\27\346\346" - "\346)\334\334\334B\315\315\315a\274\274\274\202\254\254\254\243\236\236\236" - "\277\223\223\223\325\213\213\213\345\206\206\206\357\223xs\365\243nc\367" - "\263dS\365\305[E\362\312`J\350\320fO\334\327lW\316\323\221\202\246\331\243" - "\230\211\330\314\311V\337\337\3378\347\347\347+\351\351\351#\356\356\356" - "\37\356\356\356\37\350\350\350\"\346\346\346*\336\336\3367\331\331\331J\314" - "\314\314d\274\274\274\202\254\254\254\241\237\237\237\275\226\226\226\320" - "\221\221\221\331\223\223\223\326\232\232\232\310\245\245\245\261\264\264" - "\264\223\304\304\304q\322\322\322Q\341\341\3414\356\356\356\37\357\357\357" - "\20\332\332\332\7\252\252\252\3\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\277\277\277" - "\4PPP\377PPP\377\271\271\271B\277\277\277\4\0\0\0\1\252\252\252\3\342\342" - "\342\11\350\350\350\27\343\343\343/\322\322\322Q\301\301\301x\260\260\260" - "\231\251\251\251\252\253\253\253\245\266\266\266\215\311\311\311i\334\334" - "\334C\352\352\352%\360\360\360\21\332\332\332\7\177\177\177\2\0\0\0\1\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\177\177\177" - "\2\324\324\324\6\353\353\353\15\351\351\351\30\346\346\346*\334\334\334B" - "\314\314\314`\275\275\275\200\256\256\256\237\241\241\241\272\226\226\226" - "\320\216\216\216\340\210\210\210\353\205\205\205\361\205\205\205\361\207" - "\207\207\355\215\215\215\342\225\225\225\322\240\240\240\274\254\254\254" - "\243\270\270\270\212\304\304\304r\316\316\316^\327\327\327N\331\331\331D" - "\336\336\336>\335\335\335=\333\333\333A\326\326\326K\321\321\321Z\305\305" - "\305o\273\273\273\207\254\254\254\241\241\241\241\271\230\230\230\312\225" - "\225\225\322\226\226\226\320\234\234\234\303\246\246\246\255\266\266\266" - "\220\306\306\306p\322\322\322Q\342\342\3425\347\347\347\40\360\360\360\21" - "\337\337\337\10\252\252\252\3\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\356\356\356\17\277\277\277\4\0\0\0\0\0\0\0\0\0\0\0\1\252\252\252\3\345" - "\345\345\12\350\350\350\27\343\343\343/\325\325\325O\304\304\304r\267\267" - "\267\216\260\260\260\231\265\265\265\217\301\301\301u\324\324\324T\341\341" - "\3413\354\354\354\33\351\351\351\14\277\277\277\4\0\0\0\1\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\252\252" - "\252\3\324\324\324\6\353\353\353\15\351\351\351\30\346\346\346)\333\333\333" - "A\315\315\315]\300\300\300{\261\261\261\230\244\244\244\262\232\232\232\310" - "\221\221\221\331\214\214\214\344\210\210\210\353\207\207\207\355\211\211" - "\211\352\215\215\215\341\223\223\223\324\234\234\234\303\246\246\246\257" - "\261\261\261\232\271\271\271\210\301\301\301x\307\307\307n\310\310\310g\312" - "\312\312f\310\310\310k\303\303\303t\274\274\274\202\264\264\264\224\251\251" - "\251\247\241\241\241\271\233\233\233\306\230\230\230\314\231\231\231\307" - "\241\241\241\272\253\253\253\245\270\270\270\212\310\310\310l\325\325\325" - "O\342\342\3425\347\347\347\40\360\360\360\22\342\342\342\11\277\277\277\4" - "\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\1\252\252\252\3\342\342\342\11\362\362\362\25\346" - "\346\346)\332\332\332E\315\315\315a\302\302\302v\277\277\277|\304\304\304" - "q\321\321\321Z\336\336\336>\351\351\351$\360\360\360\22\337\337\337\10\252" - "\252\252\3\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\252\252\252\3\324\324\324\6\353\353\353" - "\15\350\350\350\27\344\344\344'\335\335\335=\322\322\322V\304\304\304r\266" - "\266\266\215\252\252\252\246\240\240\240\274\227\227\227\315\221\221\221" - "\332\215\215\215\342\213\213\213\346\213\213\213\345\216\216\216\340\221" - "\221\221\327\227\227\227\313\240\240\240\274\247\247\247\256\255\255\255" - "\242\261\261\261\230\265\265\265\222\265\265\265\221\264\264\264\224\260" - "\260\260\233\253\253\253\245\245\245\245\261\240\240\240\273\235\235\235" - "\302\234\234\234\303\237\237\237\275\246\246\246\257\261\261\261\232\275" - "\275\275\201\311\311\311e\331\331\331J\345\345\3452\356\356\356\37\360\360" - "\360\22\342\342\342\11\277\277\277\4\177\177\177\2\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\1\177\177\177\2\332\332\332\7\357\357\357\20\356\356\356\37\341\341\341" - "4\330\330\330H\320\320\320W\321\321\321Y\325\325\325P\336\336\336>\346\346" - "\346)\350\350\350\27\347\347\347\13\277\277\277\4\0\0\0\1\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\1\177\177\177\2\324\324\324\6\351\351\351\14\362\362\362\25" - "\351\351\351$\342\342\3426\327\327\327M\311\311\311e\276\276\276~\262\262" - "\262\226\250\250\250\253\237\237\237\275\227\227\227\313\223\223\223\325" - "\220\220\220\333\217\217\217\335\220\220\220\333\223\223\223\326\226\226" - "\226\317\231\231\231\307\236\236\236\277\242\242\242\270\244\244\244\264" - "\245\245\245\261\244\244\244\262\243\243\243\265\241\241\241\271\240\240" - "\240\274\240\240\240\274\242\242\242\270\246\246\246\257\255\255\255\240" - "\267\267\267\214\303\303\303t\317\317\317[\334\334\334C\343\343\343.\355" - "\355\355\35\360\360\360\21\342\342\342\11\277\277\277\4\177\177\177\2\0\0" - "\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\1\177\177\177\2\314\314\314\5\347\347\347\13\362" - "\362\362\24\350\350\350\"\343\343\343.\336\336\3367\337\337\3378\344\344" - "\3441\352\352\352%\351\351\351\30\353\353\353\15\324\324\324\6\177\177\177" - "\2\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\177\177\177\2\314\314" - "\314\5\345\345\345\12\361\361\361\23\356\356\356\36\343\343\343.\333\333" - "\333A\322\322\322V\310\310\310l\274\274\274\202\262\262\262\226\251\251\251" - "\247\243\243\243\265\236\236\236\300\232\232\232\310\230\230\230\314\227" - "\227\227\316\227\227\227\315\227\227\227\313\231\231\231\307\234\234\234" - "\303\236\236\236\277\240\240\240\274\241\241\241\272\241\241\241\267\244" - "\244\244\264\246\246\246\260\251\251\251\247\260\260\260\234\267\267\267" - "\214\301\301\301y\314\314\314d\327\327\327N\337\337\3379\344\344\344'\352" - "\352\352\31\356\356\356\17\337\337\337\10\277\277\277\4\177\177\177\2\0\0" - "\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\252\252\252\3\324\324\324\6" - "\347\347\347\13\360\360\360\22\352\352\352\31\355\355\355\35\355\355\355" - "\35\352\352\352\31\361\361\361\23\351\351\351\14\324\324\324\6\252\252\252" - "\3\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\177\177" - "\177\2\277\277\277\4\342\342\342\11\356\356\356\17\351\351\351\30\351\351" - "\351$\341\341\3414\332\332\332E\320\320\320X\307\307\307j\277\277\277|\267" - "\267\267\213\261\261\261\230\254\254\254\243\250\250\250\253\245\245\245" - "\261\243\243\243\265\243\243\243\266\243\243\243\266\244\244\244\264\246" - "\246\246\260\247\247\247\254\251\251\251\247\254\254\254\241\260\260\260" - "\231\266\266\266\220\274\274\274\203\303\303\303t\313\313\313c\322\322\322" - "Q\336\336\336?\343\343\343.\347\347\347\40\362\362\362\24\351\351\351\14" - "\324\324\324\6\252\252\252\3\0\0\0\1\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\1\252\252\252\3\314\314\314\5\337\337\337\10\347" - "\347\347\13\353\353\353\15\353\353\353\15\347\347\347\13\337\337\337\10\314" - "\314\314\5\252\252\252\3\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\177\177\177\2\252\252\252\3\324\324\324" - "\6\347\347\347\13\360\360\360\22\354\354\354\33\352\352\352&\341\341\341" - "4\334\334\334B\325\325\325P\316\316\316^\310\310\310k\302\302\302v\275\275" - "\275\200\273\273\273\207\267\267\267\214\265\265\265\217\266\266\266\220" - "\265\265\265\217\267\267\267\214\271\271\271\210\274\274\274\202\300\300" - "\300z\304\304\304q\312\312\312f\321\321\321Y\326\326\326L\335\335\335=\343" - "\343\343/\351\351\351#\351\351\351\30\356\356\356\17\342\342\342\11\314\314" - "\314\5\177\177\177\2\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\177\177\177\2\252\252\252\3\277\277" - "\277\4\314\314\314\5\314\314\314\5\277\277\277\4\252\252\252\3\177\177\177" - "\2\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0", -}; - diff --git a/BasiliskII/src/Unix/BasiliskII_32x32x32_icon.c b/BasiliskII/src/Unix/BasiliskII_32x32x32_icon.c deleted file mode 100644 index 632f4673..00000000 --- a/BasiliskII/src/Unix/BasiliskII_32x32x32_icon.c +++ /dev/null @@ -1,166 +0,0 @@ -/* GIMP RGBA C-Source image dump (BasiliskII_32x32x32_icon.c) */ - -static const struct { - unsigned int width; - unsigned int height; - unsigned int bytes_per_pixel; /* 2:RGB16, 3:RGB, 4:RGBA */ - unsigned char pixel_data[32 * 32 * 4 + 1]; -} icon_32x32x32 = { - 32, 32, 4, - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0q'\17s\377s\0\377q\37\6s\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0JJJ\377\7\7\7!\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0h(\16k\377\214\0\377" - "\356b\16\357\36\27\27!\12\12\12\30%%%)\356b\16\357\315Y\40\316\263I\40\326" - "\245B)\377\203\27\0\204z\16\0{z\16\0{\203\27\0\204z\16\0{\203\27\0\204z\16" - "\0{z\16\0{\203\27\0\204\264I\27\265,\26\15""9\0\0\0\10\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\377{\0\377\377\204" - "\0\377%\22\22)\27\27\27!AAARbbb\224jjj\224\377\224\0\377\377\214\0\377\377" - "\224\0\377\377\224\0\377\377\214\0\377\377\224\0\377\377\224\0\377\377\224" - "\0\377\377\224\0\377\377\224\0\377\377\224\0\377\377\224\0\377\377\224\0" - "\377\377s\0\377,((9\37\37\37)\0\0\0\0\0\0\0\0,,,9jjj\204jjj\204aaa{jjj\204" - "\2138\40\224\377\224\0\377\377k\0\377bbb\204jjj\234zzz\306zzz\326\203\203" - "\203\316zzz\245\377\224\0\377\377\204\0\377\377s\0\377\377s\0\377\377{\0" - "\377\377s\0\377\377s\0\377\377s\0\377\377{\0\377\377s\0\377\377s\0\377\377" - "s\0\377\377s\0\377\377c\0\377zzz\306rrr\265\0\0\0\0\0\0\0\0jjj\204\234\234" - "\234\377\234\234\234\377\245\245\245\377\357c\30\377\377\224\0\377\367c\0" - "\377\224\224\224\377{{{\377ccc\377sss\377\214\214\214\377\234\234\234\377" - "\234\234\234\377\377\224\0\377\377{\0\377\377s\0\377\377k\0\377\377k\0\377" - "\377s\0\377\377k\0\377\377s\0\377\377k\0\377\377s\0\377\377s\0\377\377s\0" - "\377\377s\0\377\306Z9\377{{{\377rrr\275\0\0\0\0\0\0\0\0bbb\204\234\234\234" - "\377\245\245\245\377\367s\20\377\377\204\0\377\377k\0\377\214\214\214\377" - "kkk\377ZZZ\377{{{\377\224\224\224\377\234\234\234\377\245\245\245\377\224" - "\224\224\377\2559!\377\306\224\204\377\214kk\377kkk\377sss\377sss\377sss" - "\377sss\377sss\377sss\377sss\377\367R\10\377\377k\0\377{{{\377\203\203\203" - "\367XXX\204\0\0\0\0\0\0\0\0jjj\204\245\245\245\377\357c\30\377\377\204\0" - "\377\377s\0\377\224\204\204\377ccc\377ZZZ\377{{{\377\234\234\234\377\245" - "\245\245\377\245\245\245\377\234\234\234\377RRR\377sss\377\306\306\306\377" - "\214\214\214\377\214\214\214\377\214\214\214\377\214\214\214\377\214\214" - "\214\377\224\224\224\377\214\214\214\377\214\214\214\377\224\224\224\377" - "\377c\0\377\357R\30\377\204\204\204\377zzz\326666B\0\0\0\0\0\0\0\0aaa{\306" - "sR\377\377\224\0\377\377{\0\377\316R1\377ccc\377RRR\377JJJ\377{{{\377\234" - "\234\234\377\245\245\245\377\234\234\234\377\224\224\224\377RRR\377\336\336" - "\336\377\336\336\336\377\316\316\316\377\316\316\316\377\224\224\224\377" - "RRR\377\326\326\326\377\326\326\326\377\326\326\326\377\326\326\326\377\326" - "\306\306\377\377k\0\377\306\275\265\377\203\203\203\357jjj\234\25\25\25\30" - "\0\0\0\0\0\0\0\0jbb\204\377\224\0\377\377{\0\377\377k\0\377ccc\377RRR\377" - "kkk\377ccc\377\204\204\204\377\245\245\245\377\245\245\245\377\234\234\234" - "\377ZZZ\377ccc\377\347\347\347\377\347\347\347\377\347\347\347\377\347\347" - "\347\377\224\224\224\377RRR\377\347\347\347\377\336\336\336\377\347\347\347" - "\377\347\347\347\377\367k9\377\377c\0\377\275\275\275\377\203\203\203\347" - "IIIZ\0\0\0\0\0\0\0\0\0\0\0\0\356j\16\357\377\204\0\377\377s\0\377\234R9\377" - "RRR\377ZZZ\377\214\214\214\377ccc\377\204\204\204\377\234\234\234\377\234" - "\234\234\377\245\245\245\377RRR\377\326\326\326\377\347\347\347\377\336\336" - "\336\377\347\347\347\377\336\336\336\377\234\234\234\377JJJ\377\347\347\347" - "\377\347\347\347\377\347\347\347\377\336\336\336\377\377k\0\377\347\224\204" - "\377\234\234\234\377\203\203\203\326\36\36\36!\0\0\0\0\0\0\0\0\0\0\0\10\377" - "\224\0\377\377{\0\377\377k\0\377RRR\377RRR\377sss\377\224\224\224\377\234" - "\234\234\377\245\245\245\377\245\245\245\377\234\234\234\377\214\214\214" - "\377JJJ\377\347\347\347\377\347\347\347\377\347\347\347\377\336\336\336\377" - "\347\347\347\377\347\347\347\377\347\347\347\377\347\347\347\377\347\347" - "\347\377\336\336\336\377\347\275\265\377\377s\0\377\316\316\316\377\214\214" - "\214\377\203\203\203\265\0\0\0\10\0\0\0\0\0\0\0\0\335Y\26\336\377\214\0\377" - "\377s\0\377\316B\30\377JJJ\377ZZZ\377\204\204\204\377\234\234\234\377\245" - "\245\245\377\245\245\245\377\234\234\234\377\245\245\245\377ccc\377kkk\377" - "\347\347\347\377\336\336\336\377\347\347\347\377\347\347\347\377\347\347" - "\347\377\336\336\336\377\336\336\336\377\347\347\347\377\336\336\336\377" - "\347\347\347\377\377c!\377\367c)\377\265\265\265\377\214\214\214\377zzz\224" - "\0\0\0\0\0\0\0\0\0\0\0\0\377\224\0\377\377{\0\377\377k\0\377ZRR\377RRR\377" - "{kk\377\377Z\10\377\377s\0\377\377s\0\377\377s\0\377\357R\30\377\245\245" - "\245\377RRR\377\255\255\255\377\347\347\347\377\336\336\336\377\347\347\347" - "\377\336\336\336\377\347\347\347\377\347\347\347\377\347\347\347\377\347" - "\347\347\377\347\347\347\377\347\347\347\377\377k\0\377\336\316\316\377\234" - "\234\234\377\245\245\245\377yyy\204\0\0\0\0\0\0\0\0\36\27\27!\377\224\0\377" - "\377s\0\377\377k\0\377RRR\377ZRR\377\377k\0\377\316cJ\377\316cJ\377\377\214" - "\0\377\377s\0\377\377s\0\377\377c\0\377RRR\377\326\326\326\377\336\336\336" - "\377\347\347\347\377\347\347\347\377\347\347\347\377\336\336\336\377\347" - "\347\347\377\336\336\336\377\347\347\347\377\336\336\336\377\357\245\224" - "\377\377c\0\377\306\306\306\377\214\214\214\377\275\275\275\377yyy\204\0" - "\0\0\0\0\0\0\0\212(\16\214\377\224\0\377\377k\0\377\377R\0\377RRR\377ccc" - "\377\224\224\224\377\234\234\234\377{{{\377ccc\377\377\214\0\377\377s\0\377" - "\377s\0\377\347B\10\377\316\316\316\377\347\347\347\377\347\347\347\377\347" - "\347\347\377\336\336\336\377\347\347\347\377\347\347\347\377\347\347\347" - "\377\347\347\347\377\347\347\347\377\377R\0\377\357\204c\377\255\255\255" - "\377\224\224\224\377\326\326\326\377zzz{\0\0\0\0\0\0\0\0\335b\26\336\377" - "\214\0\377\377s\0\377\336J\20\377RRR\377kkk\377\224\224\224\377\204\204\204" - "\377kkk\377{{{\377\265ZJ\377\377\214\0\377\377s\0\377\377s\0\377111\377J" - "JJ\377RRR\377JJJ\377RRR\377\347\347\347\377\347\347\347\377\347\347\347\377" - "\336\336\336\377\347\347\347\377\377k\0\377\326\326\326\377\234\234\234\377" - "\255\255\255\377\336\336\336\377yyy\204\0\0\0\0\0\0\0\0\377Z\0\377\377\204" - "\0\377\377k\0\377\275B\30\377JJJ\377{{{\377\234\234\234\377\234\234\234\377" - "\234\234\234\377\234\234\234\377\234\234\234\377\377\224\0\377\377{\0\377" - "\377s\0\377\265B)\377sss\377\224\224\224\377kkk\377ZZZ\377\336\336\336\377" - "\336\336\336\377\347\347\347\377\347\347\347\377\367\224{\377\377Z\10\377" - "\306\306\306\377\214\214\214\377\306\306\306\377\336\336\336\377\203\203" - "\203\204\0\0\0\0\0\0\0\0\377c\0\377\377\204\0\377\377s\0\377\275B!\377RR" - "R\377{{{\377\234\234\234\377\245\245\245\377\234\234\234\377\245\245\245" - "\377\234\234\234\377\377c\0\377\377\214\0\377\377k\0\377\357J\10\377ccc\377" - "\224\224\224\377RRR\377\214\214\214\377\347\347\347\377\347\347\347\377\347" - "\347\347\377\336\336\336\377\377Z\0\377\347\245\234\377\255\255\255\377\234" - "\234\234\377\326\326\326\377\347\347\347\377zzz{\0\0\0\0\0\0\0\0\377c\0\377" - "\377\204\0\377\377s\0\377\316J\30\377RRR\377\204\204\204\377\224\224\224" - "\377kkk\377{{{\377\234\234\234\377\245\245\245\377\347c)\377\377\224\0\377" - "\377s\0\377\377R\0\377RRR\377\204\204\204\377JJJ\377\265\265\265\377\347" - "\347\347\377\336\336\336\377\347\347\347\377\336\336\336\377\377k\0\377J" - "JJ\377\214\214\214\377\265\265\265\377\336\336\336\377\347\347\347\377zz" - "z{\0\0\0\0\0\0\0\0\346b\17\347\377\214\0\377\377k\0\377\347J\10\377ZZZ\377" - "\204\204\204\377\245\245\245\377\214\214\214\377kkk\377kkk\377kkk\377\275" - "J1\377\377\224\0\377\377s\0\377\377Z\0\377JJJ\377sss\377RRR\377\214\214\214" - "\377sss\377ZZZ\377JJJ\377\275B!\377\336J\20\377\255\255\255\377\224\224\224" - "\377\316\316\316\377\336\336\336\377\347\347\347\377zzz{\0\0\0\0\0\0\0\0" - "\2437\27\245\377\214\0\377\377s\0\377\377Z\0\377RRR\377\204\204\204\377\234" - "\234\234\377\245\245\245\377\234\234\234\377\245\245\245\377\234\234\234" - "\377\306ZB\377\377\224\0\377\377s\0\377\367J\0\377111\377RRR\377RRR\377Z" - "ZZ\377sss\377\224\224\224\377\326\326\326\377\377c\0\377\336\326\316\377" - "\245\245\245\377\245\245\245\377\336\336\336\377\347\347\347\377\347\347" - "\347\377zzz{\0\0\0\0\0\0\0\0%\22\22)\377\214\0\377\377s\0\377\377k\0\377" - "RRR\377{{{\377\234\234\234\377\245\245\245\377\234\234\234\377\245\245\245" - "\377\234\234\234\377\326kJ\377\377\214\0\377\377s\0\377\306J!\377RRR\377" - "sss\377JJJ\377\265\265\265\377\336\336\336\377\347\347\347\377\347\326\326" - "\377\377c\0\377\316\316\316\377\224\224\224\377\275\275\275\377\336\336\336" - "\377\347\347\347\377\336\336\336\377zzz{\0\0\0\0\0\0\0\0\0\0\0\0\377\224" - "\0\377\377\204\0\377\377s\0\377kJJ\377kkk\377\234\234\234\377\245\245\245" - "\377\234\234\234\377\245\245\245\377\245\245\245\377\347c)\377\377\214\0" - "\377\377s\0\377cJB\377ZZZ\377{{{\377RRR\377\224\224\224\377\347\347\347\377" - "\347\347\347\377\367c)\377\367\204c\377\275\275\275\377\224\224\224\377\316" - "\316\316\377\347\347\347\377\347\347\347\377\347\347\347\377yyy\204\0\0\0" - "\0\0\0\0\0\0\0\0\0\264@\27\265\377\214\0\377\377s\0\377\357J\10\377kkk\377" - "\224\224\224\377\245\245\245\377\234\234\234\377\245\245\245\377\234\234" - "\234\377\377c\0\377\377\204\0\377\377c\0\377RRR\377ZZZ\377\204\204\204\377" - "ccc\377ccc\377\336\336\336\377\347\347\347\377\377s\0\377\326\326\326\377" - "\245\245\245\377\245\245\245\377\336\336\336\377\336\336\336\377\336\336" - "\336\377\347\347\347\377zzz{\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\377\224\0\377" - "\377\204\0\377\377k\0\377kkc\377\245\245\245\377\265\265\265\377\275\275" - "\275\377\265\265\265\377\265\265\265\377\377\224\0\377\377s\0\377\234ZR\377" - "ccc\377kkk\377\245\245\245\377\245\245\245\377RRR\377\357\357\357\377\357" - "\255\234\377\377R\0\377\326\326\326\377\234\234\234\377\326\326\326\377\357" - "\357\357\377\357\357\357\377\367\367\367\377\357\357\357\377zzz{\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0H%\37J\377\214\0\377\377{\0\377\367Z\0\377XXX\204" - "\17\17\17\20\0\0\0\0\0\0\0\0\2128\27\214\377{\0\377\335Q\16\336zzz\326zz" - "z\367bbb\224\17\17\17\20\0\0\0\0RRR\377\0\0\0\0\377Z\0\377W\37\26ZQQQkjj" - "j\234\27\27\27!\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0yA0\204\377\224\0\377\377{\0\377\367Z\10\3776..B\0" - "\0\0\0P\37\17R\377{\0\377\346Y\16\357QQQk\203\203\203\357zzz\316666B\0\0" - "\0\10\0\0\0\0III\336777\234\377s\0\377\27\27\27!rrr\245QQQk\0\0\0\10\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\17\17\17\20YYY{\356Y\7\367\377k\0\377\377k\0\377\377s\0\377\377c\0\377" - "a&\27c%%%)rrr\265zzz\326QQQk\0\0\0\10\0\0\0\0\0\0\0\0\0\0\0\20RRR\377\0\0" - "\0\0""777Jrrr\265$$$1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\25\25\25\30YYY{zzz\336\203\203" - "\203\357rrr\255IIIZIIIZjjj\245zzz\316QQQk\17\17\17\20\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\10IIIZXXXs\17\17\17\20\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\10\17\17\17\20AAAJbbb\224rrr\275zzz\275jjj\255bbb\214666B\17\17\17" - "\20\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\0\0\0\20\17" - "\17\17\20\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0", -}; - diff --git a/BasiliskII/src/Unix/Darwin/testlmem.sh b/BasiliskII/src/Unix/Darwin/testlmem.sh index 3c07f437..b252c83e 100755 --- a/BasiliskII/src/Unix/Darwin/testlmem.sh +++ b/BasiliskII/src/Unix/Darwin/testlmem.sh @@ -20,6 +20,8 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +sw_vers > /dev/null && exit 0 + PAGEZERO_SIZE=0x2000 [[ -n "$1" ]] && PAGEZERO_SIZE=$1 # You want all the output to go to stderr so that configure is quiet but diff --git a/BasiliskII/src/Unix/Linux/etherhelpertool.c b/BasiliskII/src/Unix/Linux/etherhelpertool.c new file mode 100644 index 00000000..5d6117bc --- /dev/null +++ b/BasiliskII/src/Unix/Linux/etherhelpertool.c @@ -0,0 +1,506 @@ +/* + * etherhelpertool.c - Reads and writes raw ethernet packets usng bpf + * interface. + * + * Copyright (C) 2010, Daniel Sumorok + * + * Basilisk II (C) 1997-2008 Christian Bauer + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include +#include + +#include +#include +#include +#include +#include + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include + +#define STR_MAX 256 +#define MAX_ARGV 10 + +static int remove_bridge = 0; +static char bridge_name[STR_MAX]; +static const char *exec_name = "etherhelpertool"; + +static int main_loop(int sd, int use_bpf); +static int open_tap(char *ifname); +static int run_cmd(const char *cmd); +static void handler(int signum); +static int install_signal_handlers(void); +static void do_exit(void); +static int open_bpf(char *ifname); + +int main(int argc, char **argv) +{ + char *if_name; + int ret = 255; + int sd = -1; + int tapNum; + int use_bpf; + + if (argc != 2) { + return 255; + } + + if_name = argv[1]; + + do { + if (strncmp(if_name, "tap", 3) == 0) { + sd = open_tap(if_name); + use_bpf = 0; + } else { + sd = open_bpf(if_name); + use_bpf = 1; + } + + if (sd < 0) { + fprintf(stderr, "%s: open device failed.\n", + exec_name); + ret = 253; + break; + } + + if (install_signal_handlers() != 0) { + fprintf(stderr, + "%s: failed to install signal handers.\n", + exec_name); + ret = 252; + break; + } + + ret = main_loop(sd, use_bpf); + close(sd); + } while (0); + + do_exit(); + + return ret; +} + +static int main_loop(int sd, int use_bpf) +{ + fd_set readSet; + char *outgoing, *incoming; + unsigned short *out_len; + unsigned short *in_len; + int in_index, out_index; + u_int blen = 0; + int ret; + int fret = 0; + int pkt_len; + int frame_len; + int pad; + char c = 0; + + blen = 4096; + + incoming = malloc(blen); + if (incoming == NULL) { + fprintf(stderr, + "%s: malloc() failed.\n", + exec_name); + return -2; + } + + outgoing = malloc(blen); + if (outgoing == NULL) { + free(outgoing); + fprintf(stderr, + "%s: malloc() failed.\n", + exec_name); + return -3; + } + + in_index = 0; + out_index = 0; + + out_len = (unsigned short *)outgoing; + + /* Let our parent know we are ready for business. */ + if(write(0, &c, 1) != 1) { + fprintf(stderr, "%s: Failed to notify main application: %s\n", + __func__, strerror(errno)); + } + + while (1) { + int i; + FD_ZERO(&readSet); + FD_SET(0, &readSet); + FD_SET(sd, &readSet); + + ret = select(sd + 1, &readSet, NULL, NULL, NULL); + if (ret < 0) { + fprintf(stderr, + "%s: select() failed.\n", + exec_name); + fret = -4; + break; + } + + if (FD_ISSET(0, &readSet)) { + if (out_index < 2) { + ret = read(0, outgoing + out_index, 2-out_index); + } else { + ret = read(0, outgoing + out_index, *out_len - out_index + 2); + } + + if (ret < 1) { + if(ret < 0) { + fprintf(stderr, + "%s: read() failed.\n", + exec_name); + } + fret = -5; + break; + } + + out_index += ret; + + if (out_index > 1) { + if ((*out_len + 2) > blen) { + fret = -6; + break; + } + + if (out_index == (*out_len + 2)) { + if(use_bpf) { + ret = write(sd, out_len + 1, *out_len); + if (ret != *out_len) { + fprintf(stderr, + "%s: write() failed.\n", + exec_name); + fret = -7; + break; + } + } else { + ret = write(sd, out_len + 1, *out_len); + if (ret != *out_len) { + fprintf(stderr, + "%s: write() failed.\n", + exec_name); + fret = -7; + break; + } + } + + out_index = 0; + } + } + + } + + if (FD_ISSET(sd, &readSet)) { + in_len = (unsigned short *)incoming; + + pkt_len = read(sd, in_len + 1, blen-2); + if (pkt_len < 14) { + fprintf(stderr, + "%s: read() returned %d.\n", + exec_name, pkt_len); + fret = -8; + break; + } + *in_len = pkt_len; + + if (write(0, in_len, pkt_len + 2) < (pkt_len + 2)) { + fprintf(stderr, + "%s: write() failed\n", + exec_name); + fret = -10; + break; + } + } + } + + free(incoming); + free(outgoing); + + return fret; +} + + +static int open_tap(char *ifname) +{ + char str[STR_MAX] = {0}; + char ifstr[STR_MAX] = {0}; + char *interface; + char *address = NULL; + char *netmask = NULL; + char *bridge = NULL; + char *bridged_if = NULL; + int sd; + struct ifreq ifr = {0}; + + snprintf(ifstr, STR_MAX, "%s", ifname); + interface = strtok(ifstr, "/"); + bridge = strtok(NULL, "/"); + if (bridge != NULL) { + bridged_if = strtok(NULL, "/"); + } + interface = strtok(ifstr, ":"); + + address = strtok(NULL, ":"); + + if (address != NULL) { + netmask = strtok(NULL, ":"); + } + + sd = open("/dev/net/tun", O_RDWR); + if (sd < 0) { + fprintf(stderr, "%s: Failed to open %s\n", + exec_name, interface); + return -1; + } + + snprintf(str, STR_MAX, "/dev/%s", interface); + ifr.ifr_flags = IFF_TAP | IFF_NO_PI; + strncpy(ifr.ifr_name, interface, IFNAMSIZ); + + if(ioctl(sd, TUNSETIFF, (void *)&ifr) != 0) { + fprintf(stderr, "%s: ioctl(TUNSETIFF): %s\n", + __func__, strerror(errno)); + close(sd); + return -1; + } + + if (address == NULL) { + snprintf(str, STR_MAX, "/sbin/ifconfig %s up", interface); + } else if (netmask == NULL) { + snprintf(str, STR_MAX, "/sbin/ifconfig %s %s", + interface, address); + } else { + snprintf(str, STR_MAX, "/sbin/ifconfig %s %s netmask %s", + interface, address, netmask); + } + + if (run_cmd(str) != 0) { + fprintf(stderr, "%s: Failed to configure %s\n", + exec_name, interface); + close(sd); + return -1; + } + + if (bridge != NULL) { + /* Check to see if bridge is alread up */ + snprintf(str, STR_MAX, "/sbin/ifconfig %s", bridge); + if (run_cmd(str) == 0) { + /* bridge is already up */ + if (bridged_if != NULL) { + fprintf(stderr, "%s: Warning: %s already exists, so %s was not added.\n", + exec_name, bridge, bridged_if); + } + } else { + snprintf(str, STR_MAX, "/sbin/brctl addbr %s", bridge); + if (run_cmd(str) != 0) { + fprintf(stderr, "%s: Failed to create %s\n", + exec_name, bridge); + close(sd); + return -1; + } + remove_bridge = 1; + + strncpy(bridge_name, bridge, STR_MAX); + + snprintf(str, STR_MAX, "/sbin/ifconfig %s up", bridge); + if (run_cmd(str) != 0) { + fprintf(stderr, "%s: Failed to open %s\n", + exec_name, bridge); + close(sd); + return -1; + } + + if (bridged_if != NULL) { + snprintf(str, STR_MAX, "/sbin/brctl addif %s %s", + bridge, bridged_if); + if (run_cmd(str) != 0) { + fprintf(stderr, "%s: Failed to add %s to %s\n", + exec_name, bridged_if, bridge); + close(sd); + return -1; + } + } + + snprintf(str, STR_MAX, "/sbin/brctl addif %s %s", + bridge, interface); + if (run_cmd(str) != 0) { + fprintf(stderr, "%s: Failed to add %s to %s\n", + exec_name, interface, bridge); + close(sd); + return -1; + } + } + } + + return sd; +} + +static int run_cmd(const char *cmd) { + char cmd_buffer[STR_MAX] = {0}; + char *argv[MAX_ARGV + 1] = {0}; + int i; + pid_t pid, waitpid; + int status = 0; + + /* Collect arguments */ + strncpy(cmd_buffer, cmd, STR_MAX-1); + + argv[0] = strtok(cmd_buffer, " "); + for (i=1; i +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define STR_MAX 1024 +#define MAX_ARGV 10 + +FILE * run_tool(const char *if_name, const char *tool_name) { + char cmd_buffer[STR_MAX] = {0}; + char * const argv[3] = {NULL, NULL, NULL}; + int i; + pid_t pid, waitpid; + int status = 0; + int fds[2]; + char c; + + if(socketpair(PF_LOCAL, SOCK_STREAM, 0, fds) != 0) { + fprintf(stderr, "%s: socketpair() failed: %s\n", + __func__, strerror(errno)); + return NULL; + } + + ((const char**)argv)[0] = tool_name; + ((const char**)argv)[1] = if_name; + + /* Run sub process */ + pid = fork(); + if (pid == 0) { + /* Child process */ + fclose(stdout); + fclose(stdin); + dup2(fds[0], 0); + close(fds[1]); + close(fds[0]); + + if (execve(tool_name, argv, NULL) < 0) { + perror("execve"); + exit(1); + } + } + + + close(fds[0]); + + if(read(fds[1], &c, 1) < 1) { + close(fds[1]); + return NULL; + } + + return fdopen(fds[1], "rw"); +} diff --git a/BasiliskII/src/Unix/configure.ac b/BasiliskII/src/Unix/configure.ac index 9bfae253..b3bfc3b9 100755 --- a/BasiliskII/src/Unix/configure.ac +++ b/BasiliskII/src/Unix/configure.ac @@ -39,7 +39,7 @@ AC_ARG_ENABLE(sdl-framework-prefix, [ --enable-sdl-framework-prefix=PFX d AC_ARG_WITH(sdl1, [ --with-sdl1 use SDL 1.x, rather than SDL 2.x [default=no]], [WANT_SDL_VERSION_MAJOR=1], []) dnl JIT compiler options. -AC_ARG_ENABLE(jit-compiler, [ --enable-jit-compiler enable JIT compiler [default=no]], [WANT_JIT=$enableval], [WANT_JIT=yes]) +AC_ARG_ENABLE(jit-compiler, [ --enable-jit-compiler enable JIT compiler [default=no]], [WANT_JIT=$enableval], [WANT_JIT=no]) AC_ARG_ENABLE(jit-debug, [ --enable-jit-debug activate native code disassemblers [default=no]], [WANT_JIT_DEBUG=$enableval], [WANT_JIT_DEBUG=no]) dnl FPU emulation core. @@ -81,7 +81,7 @@ AC_ARG_WITH(gtk, [ --with-gtk use GTK user interface [ *) WANT_GTK="no";; esac], [WANT_GTK="gtk2 gtk"]) -AC_ARG_WITH(mon, [ --with-mon use mon as debugger [default=yes]], [WANT_MON=$withval], [WANT_MON=yes]) +AC_ARG_WITH(mon, [ --with-mon use mon as debugger [default=no]], [WANT_MON=$withval], [WANT_MON=no]) AC_ARG_WITH(bincue, AS_HELP_STRING([--with-bincue], [Allow cdrom image files in bin/cue mode])) @@ -881,6 +881,9 @@ if [[ "x$WANT_SDL_VIDEO" = "xyes" ]]; then EXTRASYSSRCS="$EXTRASYSSRCS ../dummy/clip_dummy.cpp" ;; esac + if [[ "$WANT_GTK" != "no" ]]; then + LIBS="$LIBS -lX11" + fi fi elif [[ "x$WANT_MACOSX_GUI" != "xyes" ]]; then VIDEOSRCS="video_x.cpp" diff --git a/BasiliskII/src/Unix/ether_unix.cpp b/BasiliskII/src/Unix/ether_unix.cpp index a9ca33ce..73cba7c7 100644 --- a/BasiliskII/src/Unix/ether_unix.cpp +++ b/BasiliskII/src/Unix/ether_unix.cpp @@ -41,6 +41,21 @@ #endif #include #include + +#ifdef ENABLE_MACOSX_ETHERHELPER + +#ifdef __APPLE__ +#include +#endif + +#ifdef __linux__ +#include +#endif + +#include +#include +#endif + #include #include #include @@ -49,6 +64,7 @@ #include #include #include +#include #if defined(__FreeBSD__) || defined(sgi) || (defined(__APPLE__) && defined(__MACH__)) #include @@ -93,9 +109,17 @@ enum { NET_IF_SHEEPNET, NET_IF_ETHERTAP, NET_IF_TUNTAP, - NET_IF_SLIRP + NET_IF_SLIRP, + NET_IF_ETHERHELPER }; + +#ifdef ENABLE_MACOSX_ETHERHELPER +extern "C" { + extern FILE * run_tool(const char *if_name, const char *tool_name); +} +#endif + // Constants #if ENABLE_TUNTAP static const char ETHERCONFIG_FILE_NAME[] = DATADIR "/tunconfig"; @@ -122,6 +146,11 @@ static uint8 ether_addr[6]; // Our Ethernet address const bool ether_driver_opened = true; // Flag: is the MacOS driver opened? #endif + +#ifdef ENABLE_MACOSX_ETHERHELPER +static uint8 packet_buffer[2048]; +#endif + // Attached network protocols, maps protocol type to MacOS handler address static map net_protocols; @@ -135,6 +164,11 @@ static void ether_do_interrupt(void); static void slirp_add_redirs(); static int slirp_add_redir(const char *redir_str); +#ifdef ENABLE_MACOSX_ETHERHELPER +static int get_mac_address(const char* dev, unsigned char *addr); +static bool open_ether_helper(const std::string &if_name); +static int read_packet(void); +#endif /* * Start packet reception thread @@ -235,6 +269,9 @@ bool ether_init(void) // Do nothing if no Ethernet device specified const char *name = PrefsFindString("ether"); +#ifdef ENABLE_MACOSX_ETHERHELPER + std::string slave_dev; +#endif if (name == NULL) return false; @@ -249,6 +286,10 @@ bool ether_init(void) #ifdef HAVE_SLIRP else if (strcmp(name, "slirp") == 0) net_if_type = NET_IF_SLIRP; +#endif +#ifdef ENABLE_MACOSX_ETHERHELPER + else if (strncmp(name, "etherhelper", 10) == 0) + net_if_type = NET_IF_ETHERHELPER; #endif else net_if_type = NET_IF_SHEEPNET; @@ -300,6 +341,25 @@ bool ether_init(void) case NET_IF_SHEEPNET: strcpy(dev_name, "/dev/sheep_net"); break; +#ifdef ENABLE_MACOSX_ETHERHELPER + case NET_IF_ETHERHELPER: { + std::string device(name); + size_t pos; + + pos = device.find('/'); + if(pos != device.npos) { + slave_dev = device.substr(pos + 1); + } + + if(slave_dev.size() == 0) { + WarningAlert("No network device specified."); + return false; + } + + return open_ether_helper(slave_dev); + } + +#endif } if (net_if_type != NET_IF_SLIRP) { fd = open(dev_name, O_RDWR); @@ -750,6 +810,21 @@ static int16 ether_do_write(uint32 arg) write(slirp_input_fd, packet, len); return noErr; } else +#endif +#ifdef ENABLE_MACOSX_ETHERHELPER + if (net_if_type == NET_IF_ETHERHELPER) { + unsigned short pkt_len; + + pkt_len = len; + if (write(fd, &pkt_len, 2) < 2) { + return excessCollsns; + } + + if (write(fd, packet, len) < len) { + return excessCollsns; + } + return noErr; + } else #endif if (write(fd, packet, len) < 0) { D(bug("WARNING: Couldn't transmit packet\n")); @@ -884,6 +959,13 @@ static void *receive_func(void *arg) if (res <= 0) break; +#ifdef ENABLE_MACOSX_ETHERHELPER + if (net_if_type == NET_IF_ETHERHELPER) { + if (read_packet() < 1) { + break; + } + } +#endif if (ether_driver_opened) { // Trigger Ethernet interrupt D(bug(" packet received, triggering Ethernet interrupt\n")); @@ -923,6 +1005,18 @@ void ether_do_interrupt(void) ether_udp_read(packet, length, &from); } else +#endif +#ifdef ENABLE_MACOSX_ETHERHELPER + if (net_if_type == NET_IF_ETHERHELPER) { + unsigned short *pkt_len; + uint32 p = packet; + + pkt_len = (unsigned short *)packet_buffer; + length = *pkt_len; + memcpy(Mac2HostAddr(packet), pkt_len + 1, length); + ether_dispatch_packet(p, length); + break; + } else #endif { @@ -1049,3 +1143,144 @@ static int slirp_add_redir(const char *redir_str) WarningAlert(str); return -1; } + +#ifdef ENABLE_MACOSX_ETHERHELPER +static int get_mac_address(const char* dev, unsigned char *addr) +{ + struct ifaddrs *ifaddrs, *next; + int ret = -1; +#ifdef __APPLE__ + struct sockaddr_dl *sa; +#endif + +#ifdef __linux__ + struct sockaddr_ll *sa; +#endif + if (getifaddrs(&ifaddrs) != 0) { + perror("getifaddrs"); + return -1; + } + + next = ifaddrs; + while (next != NULL) { + switch (next->ifa_addr->sa_family) { +#ifdef __APPLE__ + case AF_LINK: + if (!strcmp(dev, next->ifa_name)) { + sa = (struct sockaddr_dl *)next->ifa_addr; + memcpy(addr, LLADDR(sa), 6); + ret = 0; + } + break; +#endif + +#ifdef __linux__ + case AF_PACKET: + if (!strcmp(dev, next->ifa_name)) { + sa = (struct sockaddr_ll *)next->ifa_addr; + memcpy(addr, sa->sll_addr, 6); + ret = 0; + } + break; +#endif + default: + break; + } + next = next->ifa_next; + } + + freeifaddrs(ifaddrs); + + return ret; +} + +static bool open_ether_helper(const std::string &if_name) +{ + FILE *fp; + char str[64]; + std::string dev_name; + size_t pos; + + fp = run_tool(if_name.c_str(), "etherhelpertool"); + if (fp == NULL) { + snprintf(str, sizeof(str), "Unable to run ether helper helper tool."); + WarningAlert(str); + return false; + } + + pos = if_name.find('/'); + dev_name = if_name; + if(pos != if_name.npos) { + dev_name.erase(pos); + } + + if(strncmp(if_name.c_str(), "tap", 3) != 0) { + if (get_mac_address(dev_name.c_str(), ether_addr) != 0) { + snprintf(str, sizeof(str), "Unable to find interface %s.", + dev_name.c_str()); + WarningAlert(str); + return false; + } + } else { + /* There is something special about this address. */ + pid_t p = getpid(); + ether_addr[0] = 0xfe; + ether_addr[1] = 0xfd; + ether_addr[2] = p >> 24; + ether_addr[3] = p >> 16; + ether_addr[4] = p >> 8; + ether_addr[5] = p; + } + + fd = dup(fileno(fp)); + fclose(fp); + + if (start_thread() == false) { + close(fd); + fd = -1; + return false; + } + + return true; +} + +static int read_packet() +{ + int index; + unsigned short *pkt_len; + int ret = -1; + + pkt_len = (unsigned short *)packet_buffer; + + index = 0; + while (1) { + if (index < 2) { + ret = read(fd, packet_buffer + index, 2 - index); + } else { + ret = read(fd, packet_buffer + index, *pkt_len - index + 2); + } + + if (ret < 1) { + fprintf(stderr, "%s: read() returned %d.\n", __func__, ret); + break; + } + + index += ret; + + if (index > 1) { + if (*pkt_len > (sizeof(packet_buffer) + 2)) { + fprintf(stderr, "%s: pkt_len (%d) too large.\n", __func__, *pkt_len); + break; + } + + if (index == (*pkt_len + 2)) { + ret = *pkt_len; + break; + } + } + } + + return ret; +} + +#endif diff --git a/BasiliskII/src/Unix/main_unix.cpp b/BasiliskII/src/Unix/main_unix.cpp old mode 100644 new mode 100755 index 48d05e22..69b85d9e --- a/BasiliskII/src/Unix/main_unix.cpp +++ b/BasiliskII/src/Unix/main_unix.cpp @@ -63,6 +63,9 @@ struct sigstate { # ifdef HAVE_GNOMEUI # include # endif +# if !defined(GDK_WINDOWING_QUARTZ) && !defined(GDK_WINDOWING_WAYLAND) +# include +# endif #endif #ifdef ENABLE_XF86_DGA @@ -384,6 +387,9 @@ static void usage(const char *prg_name) int main(int argc, char **argv) { +#if defined(ENABLE_GTK) && !defined(GDK_WINDOWING_QUARTZ) && !defined(GDK_WINDOWING_WAYLAND) + XInitThreads(); +#endif const char *vmdir = NULL; char str[256]; diff --git a/BasiliskII/src/Unix/prefs_unix.cpp b/BasiliskII/src/Unix/prefs_unix.cpp index 4ab21b6a..d277a336 100644 --- a/BasiliskII/src/Unix/prefs_unix.cpp +++ b/BasiliskII/src/Unix/prefs_unix.cpp @@ -31,11 +31,7 @@ using std::string; // Platform-specific preferences items prefs_desc platform_prefs_items[] = { - {"keycodes", TYPE_BOOLEAN, false, "use keycodes rather than keysyms to decode keyboard"}, - {"keycodefile", TYPE_STRING, false, "path of keycode translation file"}, {"fbdevicefile", TYPE_STRING, false, "path of frame buffer device specification file"}, - {"mousewheelmode", TYPE_INT32, false, "mouse wheel support mode (0=page up/down, 1=cursor up/down)"}, - {"mousewheellines", TYPE_INT32, false, "number of lines to scroll in mouse wheel mode 1"}, {"dsp", TYPE_STRING, false, "audio output (dsp) device name"}, {"mixer", TYPE_STRING, false, "audio mixer device name"}, #ifdef HAVE_SIGSEGV_SKIP_INSTRUCTION diff --git a/BasiliskII/src/Unix/video_x.cpp b/BasiliskII/src/Unix/video_x.cpp index e373719c..00e5437d 100644 --- a/BasiliskII/src/Unix/video_x.cpp +++ b/BasiliskII/src/Unix/video_x.cpp @@ -446,87 +446,6 @@ static void set_window_name(Window w, int name) } } -// This struct is designed to match the ones generated by GIMP in -// BasiliskII_*_icon.c -struct gimp_image { - unsigned int width; - unsigned int height; - unsigned int bytes_per_pixel; - unsigned char pixel_data[0]; // Variable-length -}; - -// These were generated by using 'icns2png -x -// ../MacOSX/BasiliskII.icns', then using GIMP to convert the -// resulting .png files into "C source code (*.c)". GIMP doesn't -// generate corresponding .h files with extern declarations, so just -// #include the .c files here. -#include "BasiliskII_32x32x32_icon.c" -#include "BasiliskII_128x128x32_icon.c" - -// Set window icons -static void set_window_icons(Window w) -{ - // As per the _NET_WM_ICON documentation at - // https://standards.freedesktop.org/wm-spec/wm-spec-latest.html#idm140200472568384, - // "The first two cardinals are width, height." - const unsigned int HEADER_SIZE = 2; - // We will pass 32-bit values to XChangeProperty() - const unsigned int FORMAT = 32; - - // Icon data from GIMP to be converted and passed to the - // Window Manager - const struct gimp_image* const icons[] = - {(struct gimp_image *) &icon_32x32x32, - (struct gimp_image *) &icon_128x128x32}; - const unsigned int num_icons = sizeof(icons) / sizeof(icons[0]); - unsigned int icon; - - // Work out how big the buffer needs to be to store all of our icons - unsigned int buffer_size = 0; - for (icon = 0; icon < num_icons; icon++) { - buffer_size += HEADER_SIZE + - icons[icon]->width * icons[icon]->height; - } - - // As per the XChangeProperty() man page, "If the specified - // format is 32, the property data must be a long array." - unsigned long buffer[buffer_size]; - // This points to the start of the current icon within buffer - unsigned long *buffer_icon = buffer; - - // Copy the icons into the buffer - for (icon = 0; icon < num_icons; icon++) { - const unsigned int pixel_count = icons[icon]->width * - icons[icon]->height; - assert(icons[icon]->bytes_per_pixel == 4); - buffer_icon[0] = icons[icon]->width; - buffer_icon[1] = icons[icon]->height; - unsigned long *const buffer_pixels = buffer_icon + HEADER_SIZE; - - unsigned int i; - for (i = 0; i < pixel_count; i++) { - const unsigned char *src = - &icons[icon]->pixel_data[i * icons[icon]->bytes_per_pixel]; - buffer_pixels[i] = (src[3] << 24 | - src[0] << 16 | - src[1] << 8 | - src[2]); - } - - buffer_icon += HEADER_SIZE + pixel_count; - } - - Atom net_wm_icon = XInternAtom(x_display, "_NET_WM_ICON", False); - if (net_wm_icon == None) { - ErrorAlert(STR_X_ICON_ATOM_ALLOC_ERR); - // We can still continue running, just without an icon - return; - } - XChangeProperty(x_display, w, net_wm_icon, XA_CARDINAL, FORMAT, - PropModeReplace, (const unsigned char *) buffer, - buffer_size); -} - // Set window input focus flag static void set_window_focus(Window w) { diff --git a/BasiliskII/src/Windows/BasiliskII.ico b/BasiliskII/src/Windows/BasiliskII.ico index eb3ac0ef..0c88aca1 100755 Binary files a/BasiliskII/src/Windows/BasiliskII.ico and b/BasiliskII/src/Windows/BasiliskII.ico differ diff --git a/BasiliskII/src/Windows/Makefile.in b/BasiliskII/src/Windows/Makefile.in index b3a3a11b..156d1f81 100755 --- a/BasiliskII/src/Windows/Makefile.in +++ b/BasiliskII/src/Windows/Makefile.in @@ -118,7 +118,7 @@ $(APP): $(XPLATSRCS) $(OBJ_DIR) $(OBJS) $(CXX) -o $@ $(LDFLAGS) $(OBJS) $(LIBS) $(SDL_LIBS) $(UI_APP): $(XPLATSRCS) $(OBJ_DIR) $(UI_OBJS) - $(CXX) -o $@ $(LDFLAGS) $(UI_OBJS) $(LIBS) $(GTK_LIBS) -mwindows -mno-cygwin + $(CXX) -o $@ $(LDFLAGS) $(UI_OBJS) $(LIBS) -Wl,-Bdynamic $(GTK_LIBS) -Wl,-Bstatic -mwindows -static-libgcc mostlyclean: rm -f $(APP) $(UI_APP) $(OBJ_DIR)/* core* *.core *~ *.bak @@ -149,7 +149,7 @@ $(OBJ_DIR)/%.o : %.cpp $(OBJ_DIR)/%.o : %.s $(CC) $(CPPFLAGS) $(DEFS) $(CFLAGS) -c $< -o $@ $(OBJ_DIR)/prefs_editor_gtk.o: prefs_editor_gtk.cpp - $(CXX) -O2 -mno-cygwin -mms-bitfields $(CPPFLAGS) $(DEFS) $(GTK_CFLAGS) -c $< -o $@ + $(CXX) -O2 -mms-bitfields $(CPPFLAGS) $(DEFS) $(GTK_CFLAGS) -c $< -o $@ # Windows resources $(OBJ_DIR)/%.o: %.rc diff --git a/BasiliskII/src/Windows/ether_windows.cpp b/BasiliskII/src/Windows/ether_windows.cpp index 8f38d2f0..60a5e67b 100755 --- a/BasiliskII/src/Windows/ether_windows.cpp +++ b/BasiliskII/src/Windows/ether_windows.cpp @@ -101,6 +101,14 @@ static int net_if_type = -1; // Ethernet device type #ifdef SHEEPSHAVER static bool net_open = false; // Flag: initialization succeeded, network device open uint8 ether_addr[6]; // Our Ethernet address + +#else +const bool ether_driver_opened = true; // Flag: Driver is open on MacOS side + // so ether.h layer is ready for + // calls. + // B2 doesn't provide this + // but also calls don't need it + #endif // These are protected by queue_csection @@ -1571,10 +1579,16 @@ unsigned int WINAPI ether_thread_feed_int(void *arg) D(bug("Triggering\n")); looping = true; while(thread_active && looping) { - trigger_queue(); - // Wait for interrupt acknowledge by EtherInterrupt() - WaitForSingleObject(int_ack,INFINITE); - if(thread_active) looping = set_wait_request(); + if (ether_driver_opened) { + trigger_queue(); + // Wait for interrupt acknowledge by EtherInterrupt() + WaitForSingleObject(int_ack,INFINITE); + if(thread_active) looping = set_wait_request(); + } else { + // Ether driver is closed on the MacOS side + // ether.h calls in this case are undefined + Delay_usec(20000); + } } D(bug("Queue empty.\n")); } diff --git a/BasiliskII/src/Windows/posix_emu.cpp b/BasiliskII/src/Windows/posix_emu.cpp index 8d671abc..c93b2e09 100755 --- a/BasiliskII/src/Windows/posix_emu.cpp +++ b/BasiliskII/src/Windows/posix_emu.cpp @@ -392,14 +392,23 @@ void init_posix_emu(void) int fd = my_creat( custom_icon_name, 0 ); if(fd >= 0) { my_close(fd); + struct my_stat custom_icon_stat; + int stat_result = my_stat( custom_icon_name, &custom_icon_stat ); fd = open_rfork( custom_icon_name, O_RDWR|O_CREAT ); if(fd >= 0) { my_write( fd, my_comp_icon, sizeof(my_comp_icon) ); my_close(fd); - static uint8 host_finfo[SIZEOF_FInfo]; + // need room for the things from around the finfo that set_finfo reads + static uint8 custom_icon_hfile[ioFlXFndrInfo + SIZEOF_FXInfo]; + memset(custom_icon_hfile, 0, ioFlXFndrInfo + SIZEOF_FXInfo); + static uint8 * host_finfo = custom_icon_hfile + ioFlFndrInfo; uint32 finfo = Host2MacAddr(host_finfo); get_finfo(custom_icon_name, finfo, 0, false); WriteMacInt16(finfo + fdFlags, kIsInvisible); + if (stat_result == 0) { + WriteMacInt32(finfo - ioFlFndrInfo + ioFlCrDat, TimeToMacTime(custom_icon_stat.st_ctime)); + WriteMacInt32(finfo - ioFlFndrInfo + ioFlMdDat, TimeToMacTime(custom_icon_stat.st_mtime)); + } set_finfo(custom_icon_name, finfo, 0, false); get_finfo(my_computer, finfo, 0, true); WriteMacInt16(finfo + fdFlags, ReadMacInt16(finfo + fdFlags) | kHasCustomIcon); diff --git a/BasiliskII/src/Windows/posix_emu.h b/BasiliskII/src/Windows/posix_emu.h index 730d63df..a238bece 100755 --- a/BasiliskII/src/Windows/posix_emu.h +++ b/BasiliskII/src/Windows/posix_emu.h @@ -79,24 +79,33 @@ extern int my_errno; // must hook all other functions that manipulate file names #ifndef NO_POSIX_API_HOOK -#define stat my_stat -#define fstat my_fstat -#define open my_open -#define rename my_rename -#define access my_access -#define mkdir my_mkdir -#define remove my_remove -#define creat my_creat -#define close my_close -#define lseek my_lseek -#define read my_read -#define write my_write -#define ftruncate my_chsize -#define locking my_locking -#define utime my_utime +# ifdef stat +# undef stat +# endif +# define stat my_stat +# ifdef fstat +# undef fstat +# endif +# define fstat my_fstat +# define open my_open +# define rename my_rename +# define access my_access +# define mkdir my_mkdir +# define remove my_remove +# define creat my_creat +# define close my_close +# ifdef lseek +# undef lseek +# endif +# define lseek my_lseek +# define read my_read +# define write my_write +# define ftruncate my_chsize +# define locking my_locking +# define utime my_utime -#undef errno -#define errno my_errno +# undef errno +# define errno my_errno #endif //!NO_POSIX_API_HOOK #ifndef S_ISDIR @@ -125,6 +134,6 @@ struct my_utimbuf }; // Your compiler may have different "struct stat" -> edit "struct my_stat" -#define validate_stat_struct ( sizeof(struct my_stat) == sizeof(struct stat) ) +#define validate_stat_struct ( sizeof(struct my_stat) == sizeof(struct _stat) ) #define st_crtime st_ctime diff --git a/BasiliskII/src/Windows/prefs_editor_gtk.cpp b/BasiliskII/src/Windows/prefs_editor_gtk.cpp index 66ad44c4..7e04ba80 100644 --- a/BasiliskII/src/Windows/prefs_editor_gtk.cpp +++ b/BasiliskII/src/Windows/prefs_editor_gtk.cpp @@ -26,6 +26,8 @@ #include #include +#include + #include "user_strings.h" #include "version.h" #include "cdrom.h" @@ -76,6 +78,27 @@ enum { * Utility functions */ +gchar * tchar_to_g_utf8(const TCHAR * str) { + gchar * out; + if (str == NULL) + return NULL; + int len = _tcslen(str) + 1; + #ifdef _UNICODE + /* First call just to find what the output size will be */ + int size = WideCharToMultiByte(CP_UTF8, 0, str, len, NULL, 0, NULL, NULL); + if (size == 0) + return NULL; + out = (gchar *) g_malloc(size); + if (out == NULL) + return NULL; + WideCharToMultiByte(CP_UTF8, 0, str, len, out, size, NULL, NULL); + #else /* _UNICODE */ + out = g_locale_to_utf8(str, -1, NULL, NULL, NULL); + #endif /* _UNICODE */ + return out; +} + + struct opt_desc { int label_id; GtkSignalFunc func; @@ -672,11 +695,11 @@ static GList *add_cdrom_names(void) { GList *glist = NULL; - char rootdir[4] = "X:\\"; - for (char letter = 'C'; letter <= 'Z'; letter++) { + TCHAR rootdir[4] = TEXT("X:\\"); + for (TCHAR letter = TEXT('C'); letter <= TEXT('Z'); letter++) { rootdir[0] = letter; if (GetDriveType(rootdir) == DRIVE_CDROM) - glist = g_list_append(glist, strdup(rootdir)); + glist = g_list_append(glist, _tcsdup(rootdir)); } return glist; @@ -887,11 +910,12 @@ static void create_jit_pane(GtkWidget *top) #endif set_jit_sensitive(); -#endif #ifdef SHEEPSHAVER make_checkbox(box, STR_JIT_68K_CTRL, "jit68k", GTK_SIGNAL_FUNC(tb_jit_68k)); #endif + +#endif } /* @@ -1466,24 +1490,25 @@ static int create_ether_menu(GtkWidget *menu) n_items++; // Basilisk II Ethernet Adapter - PacketOpenAdapter("", 0); + PacketOpenAdapter(TEXT(""), 0); { ULONG sz; - char names[1024]; + TCHAR names[1024]; sz = sizeof(names); if (PacketGetAdapterNames(NULL, names, &sz) == ERROR_SUCCESS) { - char *p = names; + TCHAR *p = names; while (*p) { - const char DEVICE_HEADER[] = "\\Device\\B2ether_"; - if (strnicmp(p, DEVICE_HEADER, sizeof(DEVICE_HEADER) - 1) == 0) { + const TCHAR DEVICE_HEADER[] = TEXT("\\Device\\B2ether_"); + if (_tcsnicmp(p, DEVICE_HEADER, sizeof(DEVICE_HEADER) - 1) == 0) { LPADAPTER fd = PacketOpenAdapter(p + sizeof(DEVICE_HEADER) - 1, 0); if (fd) { - char guid[256]; - sprintf(guid, "%s", p + sizeof(DEVICE_HEADER) - 1); - const char *name = ether_guid_to_name(guid); - if (name && (name = g_locale_to_utf8(name, -1, NULL, NULL, NULL))) { - add_menu_item(menu, name, (GtkSignalFunc)mn_ether_b2ether, strdup(guid)); - if (etherguid && strcmp(guid, etherguid) == 0 && + TCHAR guid[256]; + _stprintf(guid, TEXT("%s"), p + sizeof(DEVICE_HEADER) - 1); + const gchar *name = tchar_to_g_utf8(ether_guid_to_name(guid)); + if (name) { + std::string str_guid = to_string(guid); + add_menu_item(menu, name, (GtkSignalFunc)mn_ether_b2ether, strdup(str_guid.c_str())); + if (etherguid && to_tstring(guid).compare(to_tstring(etherguid)) == 0 && ether && strcmp(ether, "b2ether") == 0) active = n_items; n_items++; @@ -1491,26 +1516,27 @@ static int create_ether_menu(GtkWidget *menu) PacketCloseAdapter(fd); } } - p += strlen(p) + 1; + p += _tcslen(p) + 1; } } } PacketCloseAdapter(NULL); // TAP-Win32 - const char *tap_devices; + const TCHAR *tap_devices; if ((tap_devices = ether_tap_devices()) != NULL) { - const char *guid = tap_devices; + const TCHAR *guid = tap_devices; while (*guid) { - const char *name = ether_guid_to_name(guid); - if (name && (name = g_locale_to_utf8(name, -1, NULL, NULL, NULL))) { - add_menu_item(menu, name, (GtkSignalFunc)mn_ether_tap, strdup(guid)); - if (etherguid && strcmp(guid, etherguid) == 0 && + const gchar *name = tchar_to_g_utf8(ether_guid_to_name(guid)); + if (name) { + std::string str_guid = to_string(guid); + add_menu_item(menu, name, (GtkSignalFunc)mn_ether_tap, strdup(str_guid.c_str())); + if (etherguid && to_tstring(guid).compare(to_tstring(etherguid)) == 0 && ether && strcmp(ether, "tap") == 0) active = n_items; n_items++; } - guid += strlen(guid) + 1; + guid += _tcslen(guid) + 1; } free((char *)tap_devices); } @@ -1734,21 +1760,66 @@ void SysAddSerialPrefs(void) * Display alerts */ +static HWND GetMainWindowHandle() { + return NULL; +} + static void display_alert(int title_id, const char *text, int flags) { - MessageBox(NULL, text, GetString(title_id), MB_OK | flags); + HWND hMainWnd = GetMainWindowHandle(); + MessageBoxA(hMainWnd, text, GetString(title_id), MB_OK | flags); } +#ifdef _UNICODE +static void display_alert(int title_id, const wchar_t *text, int flags) +{ + HWND hMainWnd = GetMainWindowHandle(); + MessageBoxW(hMainWnd, text, GetStringW(title_id).get(), MB_OK | flags); +} +#endif + + +/* + * Display error alert + */ void ErrorAlert(const char *text) { + if (PrefsFindBool("nogui")) + return; + display_alert(STR_ERROR_ALERT_TITLE, text, MB_ICONSTOP); } +#ifdef _UNICODE +void ErrorAlert(const wchar_t *text) +{ + if (PrefsFindBool("nogui")) + return; + + display_alert(STR_ERROR_ALERT_TITLE, text, MB_ICONSTOP); +} +#endif + + +/* + * Display warning alert + */ void WarningAlert(const char *text) { + if (PrefsFindBool("nogui")) + return; + display_alert(STR_WARNING_ALERT_TITLE, text, MB_ICONSTOP); } +#ifdef _UNICODE +void WarningAlert(const wchar_t *text) +{ + if (PrefsFindBool("nogui")) + return; + display_alert(STR_WARNING_ALERT_TITLE, text, MB_ICONSTOP); +} +#endif /* * Start standalone GUI @@ -1774,23 +1845,23 @@ int main(int argc, char *argv[]) // Transfer control to the executable if (start) { - char path[_MAX_PATH]; + TCHAR path[_MAX_PATH]; bool ok = GetModuleFileName(NULL, path, sizeof(path)) != 0; if (ok) { - char b2_path[_MAX_PATH]; - char *p = strrchr(path, '\\'); - *++p = '\0'; + TCHAR b2_path[_MAX_PATH]; + TCHAR *p = _tcsrchr(path, TEXT('\\')); + *++p = TEXT('\0'); SetCurrentDirectory(path); - strcpy(b2_path, path); - strcat(b2_path, PROGRAM_NAME); - strcat(b2_path, ".exe"); - HINSTANCE h = ShellExecute(GetDesktopWindow(), "open", - b2_path, "", path, SW_SHOWNORMAL); + _tcscpy(b2_path, path); + _tcscat(b2_path, TEXT(PROGRAM_NAME)); + _tcscat(b2_path, TEXT(".exe")); + HINSTANCE h = ShellExecute(GetDesktopWindow(), TEXT("open"), + b2_path, TEXT(""), path, SW_SHOWNORMAL); if ((int)h <= 32) ok = false; } if (!ok) { - ErrorAlert("Coult not start " PROGRAM_NAME " executable"); + ErrorAlert(TEXT("Could not start ") TEXT(PROGRAM_NAME) TEXT(" executable")); return 1; } } diff --git a/BasiliskII/src/Windows/sysdeps.h b/BasiliskII/src/Windows/sysdeps.h index 3085a310..35a92f3b 100755 --- a/BasiliskII/src/Windows/sysdeps.h +++ b/BasiliskII/src/Windows/sysdeps.h @@ -23,6 +23,7 @@ #ifdef __MINGW32__ #define _UNICODE +#define UNICODE #endif #if !defined _MSC_VER && !defined __STDC__ diff --git a/BasiliskII/src/Windows/user_strings_windows.cpp b/BasiliskII/src/Windows/user_strings_windows.cpp index 0d98d61f..dc2993da 100755 --- a/BasiliskII/src/Windows/user_strings_windows.cpp +++ b/BasiliskII/src/Windows/user_strings_windows.cpp @@ -20,7 +20,7 @@ #include "sysdeps.h" #include "user_strings.h" - +#include "util_windows.h" // Platform-specific string definitions user_string_def platform_strings[] = { @@ -81,7 +81,11 @@ static const char *get_volume_name(void) HKEY hHelpKey; DWORD key_type, cbData; - static char volume[256]; + #ifdef _UNICODE + static char out_volume[256]; + #endif + + static TCHAR volume[256]; memset(volume, 0, sizeof(volume)); // Try Windows 2000 key first @@ -118,14 +122,20 @@ static const char *get_volume_name(void) } // Fix the error that some "tweak" apps do. - if (_stricmp(volume, "%USERNAME% on %COMPUTER%") == 0) - volume[0] = '\0'; + if (_tcsicmp(volume, TEXT("%USERNAME% on %COMPUTER%")) == 0) + volume[0] = TEXT('\0'); // No volume name found, default to "My Computer" if (volume[0] == 0) - strcpy(volume, "My Computer"); + _tcscpy(volume, TEXT("My Computer")); + + #ifdef _UNICODE + strlcpy(out_volume, volume, 256); + return out_volume; + #else return volume; + #endif } diff --git a/BasiliskII/src/adb.cpp b/BasiliskII/src/adb.cpp index c05c0000..f89c4092 100644 --- a/BasiliskII/src/adb.cpp +++ b/BasiliskII/src/adb.cpp @@ -57,6 +57,11 @@ const int KEY_BUFFER_SIZE = 16; static uint8 key_buffer[KEY_BUFFER_SIZE]; static unsigned int key_read_ptr = 0, key_write_ptr = 0; +// O2S: Button event buffer (Mac button with up/down flag) -> avoid to loose tap on a trackpad +const int BUTTON_BUFFER_SIZE = 32; +static uint8 button_buffer[BUTTON_BUFFER_SIZE]; +static unsigned int button_read_ptr = 0, button_write_ptr = 0; + static uint8 mouse_reg_3[2] = {0x63, 0x01}; // Mouse ADB register 3 static uint8 key_reg_2[2] = {0xff, 0xff}; // Keyboard ADB register 2 @@ -245,13 +250,17 @@ void ADBMouseMoved(int x, int y) } -/* +/* * Mouse button pressed */ void ADBMouseDown(int button) { - mouse_button[button] = true; + // O2S: Add button to buffer + button_buffer[button_write_ptr] = button; + button_write_ptr = (button_write_ptr + 1) % BUTTON_BUFFER_SIZE; + + // O2S: mouse_button[button] = true; SetInterruptFlag(INTFLAG_ADB); TriggerInterrupt(); } @@ -263,7 +272,11 @@ void ADBMouseDown(int button) void ADBMouseUp(int button) { - mouse_button[button] = false; + // O2S: Add button to buffer + button_buffer[button_write_ptr] = button | 0x80; + button_write_ptr = (button_write_ptr + 1) % BUTTON_BUFFER_SIZE; + + // O2S: mouse_button[button] = false; SetInterruptFlag(INTFLAG_ADB); TriggerInterrupt(); } @@ -278,7 +291,7 @@ void ADBSetRelMouseMode(bool relative) if (relative_mouse != relative) { relative_mouse = relative; mouse_x = mouse_y = 0; - } + } } @@ -347,34 +360,39 @@ void ADBInterrupt(void) uint32 mouse_base = adb_base + 16; if (relative_mouse) { + while (mx != 0 || my != 0 || button_read_ptr != button_write_ptr) { + if (button_read_ptr != button_write_ptr) { + // Read button event + uint8 button = button_buffer[button_read_ptr]; + button_read_ptr = (button_read_ptr + 1) % BUTTON_BUFFER_SIZE; + mouse_button[button & 0x3] = (button & 0x80) ? false : true; + } + // Call mouse ADB handler + if (mouse_reg_3[1] == 4) { + // Extended mouse protocol + WriteMacInt8(tmp_data, 3); + WriteMacInt8(tmp_data + 1, (my & 0x7f) | (mouse_button[0] ? 0 : 0x80)); + WriteMacInt8(tmp_data + 2, (mx & 0x7f) | (mouse_button[1] ? 0 : 0x80)); + WriteMacInt8(tmp_data + 3, ((my >> 3) & 0x70) | ((mx >> 7) & 0x07) | (mouse_button[2] ? 0x08 : 0x88)); + } else { + // 100/200 dpi mode + WriteMacInt8(tmp_data, 2); + WriteMacInt8(tmp_data + 1, (my & 0x7f) | (mouse_button[0] ? 0 : 0x80)); + WriteMacInt8(tmp_data + 2, (mx & 0x7f) | (mouse_button[1] ? 0 : 0x80)); + } + r.a[0] = tmp_data; + r.a[1] = ReadMacInt32(mouse_base); + r.a[2] = ReadMacInt32(mouse_base + 4); + r.a[3] = adb_base; + r.d[0] = (mouse_reg_3[0] << 4) | 0x0c; // Talk 0 + Execute68k(r.a[1], &r); - // Mouse movement (relative) and buttons - if (mx != 0 || my != 0 || mb[0] != old_mouse_button[0] || mb[1] != old_mouse_button[1] || mb[2] != old_mouse_button[2]) { - - // Call mouse ADB handler - if (mouse_reg_3[1] == 4) { - // Extended mouse protocol - WriteMacInt8(tmp_data, 3); - WriteMacInt8(tmp_data + 1, (my & 0x7f) | (mb[0] ? 0 : 0x80)); - WriteMacInt8(tmp_data + 2, (mx & 0x7f) | (mb[1] ? 0 : 0x80)); - WriteMacInt8(tmp_data + 3, ((my >> 3) & 0x70) | ((mx >> 7) & 0x07) | (mb[2] ? 0x08 : 0x88)); - } else { - // 100/200 dpi mode - WriteMacInt8(tmp_data, 2); - WriteMacInt8(tmp_data + 1, (my & 0x7f) | (mb[0] ? 0 : 0x80)); - WriteMacInt8(tmp_data + 2, (mx & 0x7f) | (mb[1] ? 0 : 0x80)); - } - r.a[0] = tmp_data; - r.a[1] = ReadMacInt32(mouse_base); - r.a[2] = ReadMacInt32(mouse_base + 4); - r.a[3] = adb_base; - r.d[0] = (mouse_reg_3[0] << 4) | 0x0c; // Talk 0 - Execute68k(r.a[1], &r); - - old_mouse_button[0] = mb[0]; - old_mouse_button[1] = mb[1]; - old_mouse_button[2] = mb[2]; - } + old_mouse_button[0] = mouse_button[0]; + old_mouse_button[1] = mouse_button[1]; + old_mouse_button[2] = mouse_button[2]; + mx = 0; + my = 0; + } } else { @@ -405,34 +423,42 @@ void ADBInterrupt(void) old_mouse_y = my; } - // Send mouse button events - if (mb[0] != old_mouse_button[0] || mb[1] != old_mouse_button[1] || mb[2] != old_mouse_button[2]) { - uint32 mouse_base = adb_base + 16; + // O2S: Process accumulated button events + while (button_read_ptr != button_write_ptr) { + // Read button event + uint8 button = button_buffer[button_read_ptr]; + button_read_ptr = (button_read_ptr + 1) % BUTTON_BUFFER_SIZE; + mouse_button[button & 0x3] = (button & 0x80) ? false : true; - // Call mouse ADB handler - if (mouse_reg_3[1] == 4) { - // Extended mouse protocol - WriteMacInt8(tmp_data, 3); - WriteMacInt8(tmp_data + 1, mb[0] ? 0 : 0x80); - WriteMacInt8(tmp_data + 2, mb[1] ? 0 : 0x80); - WriteMacInt8(tmp_data + 3, mb[2] ? 0x08 : 0x88); - } else { - // 100/200 dpi mode - WriteMacInt8(tmp_data, 2); - WriteMacInt8(tmp_data + 1, mb[0] ? 0 : 0x80); - WriteMacInt8(tmp_data + 2, mb[1] ? 0 : 0x80); - } - r.a[0] = tmp_data; - r.a[1] = ReadMacInt32(mouse_base); - r.a[2] = ReadMacInt32(mouse_base + 4); - r.a[3] = adb_base; - r.d[0] = (mouse_reg_3[0] << 4) | 0x0c; // Talk 0 - Execute68k(r.a[1], &r); + if (mouse_button[0] != old_mouse_button[0] || mouse_button[1] != old_mouse_button[1] || mouse_button[2] != old_mouse_button[2]) { + uint32 mouse_base = adb_base + 16; + + // Call mouse ADB handler + if (mouse_reg_3[1] == 4) { + // Extended mouse protocol + WriteMacInt8(tmp_data, 3); + WriteMacInt8(tmp_data + 1, mouse_button[0] ? 0 : 0x80); + WriteMacInt8(tmp_data + 2, mouse_button[1] ? 0 : 0x80); + WriteMacInt8(tmp_data + 3, mouse_button[2] ? 0x08 : 0x88); + } else { + // 100/200 dpi mode + WriteMacInt8(tmp_data, 2); + WriteMacInt8(tmp_data + 1, mouse_button[0] ? 0 : 0x80); + WriteMacInt8(tmp_data + 2, mouse_button[1] ? 0 : 0x80); + } + r.a[0] = tmp_data; + r.a[1] = ReadMacInt32(mouse_base); + r.a[2] = ReadMacInt32(mouse_base + 4); + r.a[3] = adb_base; + r.d[0] = (mouse_reg_3[0] << 4) | 0x0c; // Talk 0 + Execute68k(r.a[1], &r); + + old_mouse_button[0] = mouse_button[0]; + old_mouse_button[1] = mouse_button[1]; + old_mouse_button[2] = mouse_button[2]; + } + } - old_mouse_button[0] = mb[0]; - old_mouse_button[1] = mb[1]; - old_mouse_button[2] = mb[2]; - } } // Process accumulated keyboard events diff --git a/BasiliskII/src/macos_util.cpp b/BasiliskII/src/macos_util.cpp index dea66451..ba7ac874 100644 --- a/BasiliskII/src/macos_util.cpp +++ b/BasiliskII/src/macos_util.cpp @@ -133,6 +133,13 @@ uint32 TimeToMacTime(time_t t) // This code is taken from glibc 2.2 // Convert to number of seconds elapsed since 1-Jan-1904 + + #ifdef WIN32 + if (t == -1) { + // failsafe as this will segfault + return 0; + } + #endif struct tm *local = localtime(&t); const int TM_EPOCH_YEAR = 1900; const int MAC_EPOCH_YEAR = 1904; diff --git a/BasiliskII/src/prefs_items.cpp b/BasiliskII/src/prefs_items.cpp index 99f818ed..033b119b 100644 --- a/BasiliskII/src/prefs_items.cpp +++ b/BasiliskII/src/prefs_items.cpp @@ -68,10 +68,10 @@ prefs_desc common_prefs_items[] = { {"jitinline", TYPE_BOOLEAN, false, "enable translation through constant jumps"}, {"jitblacklist", TYPE_STRING, false, "blacklist opcodes from translation"}, {"keyboardtype", TYPE_INT32, false, "hardware keyboard type"}, - {"keycodes",TYPE_BOOLEAN,false,"use raw keycode"}, - {"keycodefile",TYPE_STRING,"Keycode file"}, - {"mousewheelmode",TYPE_BOOLEAN,"Use WheelMode"}, - {"mousewheellines",TYPE_INT32,"wheel line nb"}, + {"keycodes", TYPE_BOOLEAN, false, "use keycodes rather than keysyms to decode keyboard"}, + {"keycodefile", TYPE_STRING, false, "path of keycode translation file"}, + {"mousewheelmode", TYPE_INT32, false, "mouse wheel support (0=page up/down, 1=cursor up/down)"}, + {"mousewheellines", TYPE_INT32, false, "number of lines to scroll in mouse wheel mode 1"}, {"hotkey",TYPE_INT32,false,"hotkey modifier"}, {"scale_nearest",TYPE_BOOLEAN,false,"nearest neighbor scaling"}, {"scale_integer",TYPE_BOOLEAN,false,"integer scaling"}, diff --git a/BasiliskII/src/slirp/slirp.c b/BasiliskII/src/slirp/slirp.c index 0ecb09c4..cd97e299 100755 --- a/BasiliskII/src/slirp/slirp.c +++ b/BasiliskII/src/slirp/slirp.c @@ -427,7 +427,7 @@ void slirp_select_poll(fd_set *readfds, fd_set *writefds, fd_set *xfds) /* Connected */ so->so_state &= ~SS_ISFCONNECTING; - ret = send(so->s, &ret, 0, 0); + ret = send(so->s, NULL, 0, 0); if (ret < 0) { /* XXXXX Must fix, zero bytes is a NOP */ if (errno == EAGAIN || errno == EWOULDBLOCK || diff --git a/BasiliskII/src/slirp/slirp.h b/BasiliskII/src/slirp/slirp.h index 3f9428af..a677185e 100755 --- a/BasiliskII/src/slirp/slirp.h +++ b/BasiliskII/src/slirp/slirp.h @@ -32,21 +32,6 @@ typedef unsigned long ioctlsockopt_t; # include # include -#ifdef __MINGW32__ -char * WSAAPI inet_ntop( - INT Family, - PVOID pAddr, - PTSTR pStringBuf, - size_t StringBufSize -); - -INT WSAAPI inet_pton( - INT Family, - const char * pszAddrString, - PVOID pAddrBuf -); -#endif - # include # include diff --git a/README.md b/README.md index a9b96f1b..da1c6620 100644 --- a/README.md +++ b/README.md @@ -8,23 +8,25 @@ MinGW 32-bit JIT ``` macOS 64-bit JIT Linux 32-bit JIT -MinGW 32-bit --- +MinGW 32-bit JIT ``` ### How To Build -These builds need to be installed SDL2 framework/library. +These builds need to be installed SDL2.0.10+ framework/library. #### BasiliskII ##### macOS 1. Open BasiliskII/src/MacOSX/BasiliskII.xcodeproj 1. Set Build Configuration to Release 1. Build +(or same as Linux) + ##### Linux(x86) ``` $ cd macemu/BasiliskII/src/Unix $ ./autogen.sh $ make ``` -##### MinGW32/MSYS +##### MinGW32/MSYS2 ``` $ cd macemu/BasiliskII/src/Windows $ ../Unix/autogen.sh @@ -36,15 +38,15 @@ $ make 1. Set Build Configuration to Release 1. Build +(or same as Linux) + ##### Linux(x86) ``` -$ cd macemu/SheepShaver -$ make links -$ cd src/Unix +$ cd macemu/SheepShaver/src/Unix $ ./autogen.sh $ make ``` -##### MinGW32/MSYS +##### MinGW32/MSYS2 ``` $ cd macemu/SheepShaver $ make links diff --git a/SheepShaver/Makefile b/SheepShaver/Makefile index b29b1f9d..585417f4 100644 --- a/SheepShaver/Makefile +++ b/SheepShaver/Makefile @@ -61,7 +61,7 @@ links: BeOS/audio_beos.cpp BeOS/extfs_beos.cpp BeOS/scsi_beos.cpp \ BeOS/serial_beos.cpp BeOS/sys_beos.cpp BeOS/timer_beos.cpp \ BeOS/xpram_beos.cpp BeOS/SheepDriver BeOS/SheepNet \ - CrossPlatform/sigsegv.h CrossPlatform/sigsegv.cpp CrossPlatform/vm_alloc.h CrossPlatform/vm_alloc.cpp \ + CrossPlatform/sigsegv.h CrossPlatform/vm_alloc.h CrossPlatform/vm_alloc.cpp \ CrossPlatform/video_vosf.h CrossPlatform/video_blit.h CrossPlatform/video_blit.cpp \ Unix/audio_oss_esd.cpp Unix/bincue_unix.cpp Unix/bincue_unix.h \ Unix/vhd_unix.cpp \ @@ -74,7 +74,7 @@ links: Unix/rpc.h Unix/rpc_unix.cpp Unix/ldscripts \ Unix/tinyxml2.h Unix/tinyxml2.cpp Unix/disk_unix.h \ Unix/disk_sparsebundle.cpp Unix/Darwin/mkstandalone \ - Unix/Darwin/lowmem.c Unix/Darwin/pagezero.c Unix/Darwin/testlmem.sh \ + Unix/Darwin/pagezero.c Unix/Darwin/testlmem.sh \ dummy/audio_dummy.cpp dummy/clip_dummy.cpp dummy/serial_dummy.cpp \ dummy/prefs_editor_dummy.cpp dummy/scsi_dummy.cpp SDL slirp \ MacOSX/sys_darwin.cpp MacOSX/clip_macosx.cpp MacOSX/clip_macosx64.mm \ @@ -99,7 +99,7 @@ links: case $$i in *codegen_x86.h) o=kpx_cpu/src/cpu/jit/x86/codegen_x86.h;; esac; \ SUB=`echo $$o | sed 's;[^/]*/;../;g' | sed 's;[^/]*$$;;'` ;\ cur_link=src/$$o ;\ - if [ -d "$$cur_link" ]; then rm -rf "$$cur_link"; fi ;\ + if [ -e "$$cur_link" ]; then rm -rf "$$cur_link"; fi ;\ ln -sf "$$PREFIX$$SUB$(B2_TOPDIR)/src/$$i" $$cur_link; \ fi; \ done; diff --git a/SheepShaver/src/CrossPlatform/sigsegv.cpp b/SheepShaver/src/CrossPlatform/sigsegv.cpp index 69b48238..244c9ac2 100644 --- a/SheepShaver/src/CrossPlatform/sigsegv.cpp +++ b/SheepShaver/src/CrossPlatform/sigsegv.cpp @@ -2608,8 +2608,14 @@ sigsegv_address_t sigsegv_get_fault_instruction_address(sigsegv_info_t *SIP) #if defined(__APPLE__) && defined(__x86_64__) -extern uint8_t gZeroPage[0x3000], gKernelData[0x2000]; -extern uint32_t RAMBase, ROMBase, ROMEnd; +#ifdef CONFIGURE_TEST_SIGSEGV_RECOVERY +#define EXTERN +#else +#define EXTERN extern +#endif + +EXTERN uint8_t gZeroPage[0x3000], gKernelData[0x2000]; +EXTERN uint32_t RAMBase, ROMBase, ROMEnd; template T safeLoad(uint32_t a) { if (a < 0x3000) return *(T *)&gZeroPage[a]; diff --git a/SheepShaver/src/MacOSX/Info.plist.in b/SheepShaver/src/MacOSX/Info.plist.in index 02528a92..ada536e3 100644 --- a/SheepShaver/src/MacOSX/Info.plist.in +++ b/SheepShaver/src/MacOSX/Info.plist.in @@ -1,25 +1,9 @@ - + CFBundleDevelopmentRegion English - CFBundleExecutable - SheepShaver - CFBundleInfoDictionaryVersion - 6.0 - CFBundlePackageType - APPL - CFBundleSignature - ???? - CFBundleVersion - @PACKAGE_VERSION@ - CFBundleShortVersionString - @PACKAGE_VERSION@ - CFBundleIconFile - SheepShaver.icns - CSResourcesFileMapped - CFBundleDocumentTypes @@ -37,6 +21,24 @@ + CFBundleExecutable + SheepShaver + CFBundleIconFile + SheepShaver.icns + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + APPL + CFBundleShortVersionString + @PACKAGE_VERSION@ + CFBundleSignature + ???? + CFBundleVersion + @PACKAGE_VERSION@ + CSResourcesFileMapped + LSArchitecturePriority x86_64 diff --git a/SheepShaver/src/MacOSX/SheepShaver_Xcode8.xcodeproj/project.pbxproj b/SheepShaver/src/MacOSX/SheepShaver_Xcode8.xcodeproj/project.pbxproj index d38d6ce4..2d6bc2d6 100755 --- a/SheepShaver/src/MacOSX/SheepShaver_Xcode8.xcodeproj/project.pbxproj +++ b/SheepShaver/src/MacOSX/SheepShaver_Xcode8.xcodeproj/project.pbxproj @@ -84,6 +84,9 @@ E413A40320CF7E6D00FBE967 /* video_sdl2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E413A40220CF7E6D00FBE967 /* video_sdl2.cpp */; }; E4150D1220D557820077C51A /* SDL2.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = E4150D1120D557820077C51A /* SDL2.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; E41936C420CFE64D003A7654 /* SDLMain.m in Sources */ = {isa = PBXBuildFile; fileRef = E41936C320CFE64D003A7654 /* SDLMain.m */; }; + E4202603241250EE000508DF /* runtool.c in Sources */ = {isa = PBXBuildFile; fileRef = E4202602241250EE000508DF /* runtool.c */; }; + E420260524125182000508DF /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E420260424125182000508DF /* Security.framework */; }; + E420260B24125442000508DF /* etherhelpertool in Resources */ = {isa = PBXBuildFile; fileRef = E420260A2412540D000508DF /* etherhelpertool */; }; E420910120D0C4FA0094654F /* SDL2.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E420910020D0C4FA0094654F /* SDL2.framework */; }; E444DC1520C8F06700DD29C9 /* pict.c in Sources */ = {isa = PBXBuildFile; fileRef = E444DC1420C8F06700DD29C9 /* pict.c */; }; E44C460520D262B0000583AE /* tftp.c in Sources */ = {isa = PBXBuildFile; fileRef = E44C45DC20D262AD000583AE /* tftp.c */; }; @@ -329,6 +332,10 @@ E4150D1120D557820077C51A /* SDL2.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SDL2.framework; path = /Library/Frameworks/SDL2.framework; sourceTree = ""; }; E41936C220CFE64D003A7654 /* SDLMain.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDLMain.h; path = ../../../BasiliskII/src/SDL/SDLMain.h; sourceTree = ""; }; E41936C320CFE64D003A7654 /* SDLMain.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SDLMain.m; path = ../../../BasiliskII/src/SDL/SDLMain.m; sourceTree = ""; }; + E4202600241250E2000508DF /* etherhelpertool.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = etherhelpertool.c; sourceTree = ""; }; + E4202602241250EE000508DF /* runtool.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = runtool.c; sourceTree = ""; }; + E420260424125182000508DF /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = System/Library/Frameworks/Security.framework; sourceTree = SDKROOT; }; + E420260A2412540D000508DF /* etherhelpertool */ = {isa = PBXFileReference; lastKnownFileType = text; path = etherhelpertool; sourceTree = BUILT_PRODUCTS_DIR; }; E420910020D0C4FA0094654F /* SDL2.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SDL2.framework; path = /Library/Frameworks/SDL2.framework; sourceTree = ""; }; E4302EE21FBFE7FA00A5B500 /* lowmem.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lowmem.c; path = Darwin/lowmem.c; sourceTree = ""; }; E444DC1420C8F06700DD29C9 /* pict.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = pict.c; path = ../pict.c; sourceTree = ""; }; @@ -392,6 +399,7 @@ buildActionMask = 2147483647; files = ( E420910120D0C4FA0094654F /* SDL2.framework in Frameworks */, + E420260524125182000508DF /* Security.framework in Frameworks */, 0856D21514A9A6C6000B1711 /* IOKit.framework in Frameworks */, 08CD42DC14B7B85B009CA2A2 /* Cocoa.framework in Frameworks */, 08CD42E814B7B8AA009CA2A2 /* Carbon.framework in Frameworks */, @@ -430,6 +438,7 @@ 0856CCC814A99E30000B1711 /* Sources */, 08CD42DF14B7B865009CA2A2 /* Frameworks */, 0856CCC214A99E1C000B1711 /* Products */, + E420260924125403000508DF /* Generated */, ); sourceTree = ""; }; @@ -706,6 +715,8 @@ 0856CE0614A99EEF000B1711 /* MacOSX */ = { isa = PBXGroup; children = ( + E4202600241250E2000508DF /* etherhelpertool.c */, + E4202602241250EE000508DF /* runtool.c */, 0873A76514ABD151004F12B7 /* config */, 0856D2D614A9A704000B1711 /* Launcher */, E456E2AC20C82B60006C8DC2 /* clip_macosx64.mm */, @@ -862,6 +873,7 @@ 08CD42DF14B7B865009CA2A2 /* Frameworks */ = { isa = PBXGroup; children = ( + E420260424125182000508DF /* Security.framework */, E420910020D0C4FA0094654F /* SDL2.framework */, 08CD42E714B7B8AA009CA2A2 /* Carbon.framework */, 08CD42DB14B7B85B009CA2A2 /* Cocoa.framework */, @@ -870,6 +882,14 @@ name = Frameworks; sourceTree = ""; }; + E420260924125403000508DF /* Generated */ = { + isa = PBXGroup; + children = ( + E420260A2412540D000508DF /* etherhelpertool */, + ); + name = Generated; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ @@ -911,6 +931,7 @@ isa = PBXNativeTarget; buildConfigurationList = 0856CCC714A99E1D000B1711 /* Build configuration list for PBXNativeTarget "SheepShaver" */; buildPhases = ( + E4202606241251C6000508DF /* ShellScript */, 0856CCBD14A99E1C000B1711 /* Resources */, 0856CCBE14A99E1C000B1711 /* Sources */, 0856CCBF14A99E1C000B1711 /* Frameworks */, @@ -961,6 +982,7 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + E420260B24125442000508DF /* etherhelpertool in Resources */, E44C460820D262B0000583AE /* VERSION in Resources */, 0856D05914A99EF1000B1711 /* SheepShaver.icns in Resources */, E44C460F20D262B0000583AE /* COPYRIGHT in Resources */, @@ -986,6 +1008,23 @@ shellPath = /bin/sh; shellScript = "sed -i '' 's/@PACKAGE_VERSION@/2.5/g' \"${BUILT_PRODUCTS_DIR}/${INFOPLIST_PATH}\""; }; + E4202606241251C6000508DF /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "cc etherhelpertool.c -framework Security -o $BUILT_PRODUCTS_DIR/etherhelpertool\n"; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -1049,6 +1088,7 @@ 0856D06214A99EF1000B1711 /* audio_sdl.cpp in Sources */, 0856D06614A99EF1000B1711 /* serial.cpp in Sources */, E456E2AD20C82B61006C8DC2 /* clip_macosx64.mm in Sources */, + E4202603241250EE000508DF /* runtool.c in Sources */, 0856D07B14A99EF1000B1711 /* sony.cpp in Sources */, 0856D07C14A99EF1000B1711 /* thunks.cpp in Sources */, 0856D07D14A99EF1000B1711 /* timer.cpp in Sources */, @@ -1227,6 +1267,7 @@ GCC_PRECOMPILE_PREFIX_HEADER = NO; GCC_PREFIX_HEADER = ""; GCC_PREPROCESSOR_DEFINITIONS = ( + ENABLE_MACOSX_ETHERHELPER, "DATADIR=", HAVE_CONFIG_H, USE_JIT, @@ -1262,6 +1303,7 @@ "-lkpx_cpu", ); PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; + PRODUCT_BUNDLE_IDENTIFIER = net.cebix.sheepshaver; PRODUCT_NAME = SheepShaver; VALID_ARCHS = x86_64; WARNING_LDFLAGS = ""; @@ -1288,6 +1330,7 @@ GCC_PRECOMPILE_PREFIX_HEADER = NO; GCC_PREFIX_HEADER = ""; GCC_PREPROCESSOR_DEFINITIONS = ( + ENABLE_MACOSX_ETHERHELPER, "DATADIR=", HAVE_CONFIG_H, USE_JIT, @@ -1324,6 +1367,7 @@ "-lkpx_cpu", ); PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; + PRODUCT_BUNDLE_IDENTIFIER = net.cebix.sheepshaver; PRODUCT_NAME = SheepShaver; VALID_ARCHS = x86_64; }; diff --git a/SheepShaver/src/MacOSX/etherhelpertool.c b/SheepShaver/src/MacOSX/etherhelpertool.c new file mode 120000 index 00000000..f8c14003 --- /dev/null +++ b/SheepShaver/src/MacOSX/etherhelpertool.c @@ -0,0 +1 @@ +../../../BasiliskII/src/MacOSX/etherhelpertool.c \ No newline at end of file diff --git a/SheepShaver/src/MacOSX/runtool.c b/SheepShaver/src/MacOSX/runtool.c new file mode 120000 index 00000000..592a2495 --- /dev/null +++ b/SheepShaver/src/MacOSX/runtool.c @@ -0,0 +1 @@ +../../../BasiliskII/src/MacOSX/runtool.c \ No newline at end of file diff --git a/SheepShaver/src/Unix/.gitignore b/SheepShaver/src/Unix/.gitignore index 0461f22e..8c6ac66f 100644 --- a/SheepShaver/src/Unix/.gitignore +++ b/SheepShaver/src/Unix/.gitignore @@ -21,5 +21,7 @@ dyngen # Generated files from the Xcode build basic-dyngen-ops-x86_32.hpp basic-dyngen-ops-x86_64.hpp +basic-dyngen-ops-x86_64_macos.hpp ppc-dyngen-ops-x86_32.hpp ppc-dyngen-ops-x86_64.hpp +ppc-dyngen-ops-x86_64_macos.hpp diff --git a/SheepShaver/src/Unix/Makefile.in b/SheepShaver/src/Unix/Makefile.in index 350ec4b0..ed6148a4 100644 --- a/SheepShaver/src/Unix/Makefile.in +++ b/SheepShaver/src/Unix/Makefile.in @@ -176,7 +176,7 @@ uninstall: clean: rm -f $(PROGS) $(OBJ_DIR)/* core* *.core *~ *.bak ppc-execute-impl.cpp - rm -f dyngen basic-dyngen-ops.hpp ppc-dyngen-ops.hpp ppc_asm.out.s + rm -f dyngen {basic,ppc}-dyngen-ops*.hpp ppc_asm.out.s rm -rf $(APP_APP) $(GUI_APP_APP) distclean: clean @@ -216,18 +216,22 @@ ifeq ($(USE_DYNGEN),yes) DYNGENDEPS = basic-dyngen-ops.hpp ppc-dyngen-ops.hpp ifeq ($(USE_DYNGEN_PRECOMPILED),yes) -basic-dyngen-ops.hpp: dyngen_precompiled/basic-dyngen-ops.hpp basic-dyngen-ops-x86_32.hpp basic-dyngen-ops-x86_64.hpp +basic-dyngen-ops.hpp: dyngen_precompiled/basic-dyngen-ops.hpp basic-dyngen-ops-x86_32.hpp basic-dyngen-ops-x86_64.hpp basic-dyngen-ops-x86_64_macos.hpp cp -f $< $@ basic-dyngen-ops-x86_32.hpp: dyngen_precompiled/basic-dyngen-ops-x86_32.hpp cp -f $< $@ basic-dyngen-ops-x86_64.hpp: dyngen_precompiled/basic-dyngen-ops-x86_64.hpp cp -f $< $@ -ppc-dyngen-ops.hpp: dyngen_precompiled/ppc-dyngen-ops.hpp ppc-dyngen-ops-x86_32.hpp ppc-dyngen-ops-x86_64.hpp +basic-dyngen-ops-x86_64_macos.hpp: dyngen_precompiled/basic-dyngen-ops-x86_64_macos.hpp + cp -f $< $@ +ppc-dyngen-ops.hpp: dyngen_precompiled/ppc-dyngen-ops.hpp ppc-dyngen-ops-x86_32.hpp ppc-dyngen-ops-x86_64.hpp ppc-dyngen-ops-x86_64_macos.hpp cp -f $< $@ ppc-dyngen-ops-x86_32.hpp: dyngen_precompiled/ppc-dyngen-ops-x86_32.hpp cp -f $< $@ ppc-dyngen-ops-x86_64.hpp: dyngen_precompiled/ppc-dyngen-ops-x86_64.hpp cp -f $< $@ +ppc-dyngen-ops-x86_64_macos.hpp: dyngen_precompiled/ppc-dyngen-ops-x86_64_macos.hpp + cp -f $< $@ else # Only GCC is supported for generating synthetic opcodes $(DYNGEN): $(DYNGENOBJS) diff --git a/SheepShaver/src/Unix/configure.ac b/SheepShaver/src/Unix/configure.ac index 749ebdff..7c546e27 100755 --- a/SheepShaver/src/Unix/configure.ac +++ b/SheepShaver/src/Unix/configure.ac @@ -34,7 +34,7 @@ AC_ARG_ENABLE(ppc-emulator, [ --enable-ppc-emulator use the selected PowerPC AC_ARG_ENABLE(fbdev-dga, [ --enable-fbdev-dga use direct frame buffer access via /dev/fb0 [default=yes]], [WANT_FBDEV_DGA=$enableval], [WANT_FBDEV_DGA=yes]) AC_ARG_ENABLE(xf86-dga, [ --enable-xf86-dga use the XFree86 DGA extension [default=yes]], [WANT_XF86_DGA=$enableval], [WANT_XF86_DGA=yes]) AC_ARG_ENABLE(xf86-vidmode, [ --enable-xf86-vidmode use the XFree86 VidMode extension [default=yes]], [WANT_XF86_VIDMODE=$enableval], [WANT_XF86_VIDMODE=yes]) -AC_ARG_ENABLE(vosf, [ --enable-vosf enable video on SEGV signals [default=yes]], [WANT_VOSF=$enableval], [WANT_VOSF=yes]) +AC_ARG_ENABLE(vosf, [ --enable-vosf enable video on SEGV signals [default=no]], [WANT_VOSF=$enableval], [WANT_VOSF=no]) AC_ARG_ENABLE(standalone-gui,[ --enable-standalone-gui enable a standalone GUI prefs editor [default=no]], [WANT_STANDALONE_GUI=$enableval], [WANT_STANDALONE_GUI=no]) AC_ARG_WITH(esd, [ --with-esd support ESD for sound under Linux/FreeBSD [default=yes]], [WANT_ESD=$withval], [WANT_ESD=yes]) AC_ARG_WITH(gtk, [ --with-gtk use GTK user interface [default=yes]], @@ -764,6 +764,9 @@ if [[ "x$WANT_SDL_VIDEO" = "xyes" ]]; then CPPFLAGS="$CPPFLAGS -I../MacOSX" else EXTRASYSSRCS="$EXTRASYSSRCS ../dummy/clip_dummy.cpp" + if [[ "$WANT_GTK" != "no" ]]; then + LIBS="$LIBS -lX11" + fi fi else VIDEOSRCS="video_x.cpp" diff --git a/SheepShaver/src/Unix/dyngen_precompiled/ppc-execute-impl.cpp b/SheepShaver/src/Unix/dyngen_precompiled/ppc-execute-impl.cpp index 07706ac9..89d2c329 100644 --- a/SheepShaver/src/Unix/dyngen_precompiled/ppc-execute-impl.cpp +++ b/SheepShaver/src/Unix/dyngen_precompiled/ppc-execute-impl.cpp @@ -57,6 +57,8 @@ template void powerpc_cpu::execute_fp_arith(uint32); template void powerpc_cpu::execute_fp_arith(uint32); template void powerpc_cpu::execute_fp_round(uint32); +template void powerpc_cpu::execute_fp_arith(uint32); +template void powerpc_cpu::execute_fp_arith(uint32); template void powerpc_cpu::execute_fp_arith(uint32); template void powerpc_cpu::execute_fp_arith(uint32); template void powerpc_cpu::execute_fp_arith(uint32); @@ -258,7 +260,7 @@ template void powerpc_cpu::execute_vector_arith, operand_vD_V16QI, operand_vA_V16QI, operand_vB_V16QI, operand_vC_NONE, fake_bit_field< bool, false >, 0 >(uint32); template void powerpc_cpu::execute_vector_arith, operand_vD_V8HI, operand_vA_V8HI, operand_vB_V8HI, operand_vC_NONE, fake_bit_field< bool, false >, 0 >(uint32); template void powerpc_cpu::execute_vector_arith, operand_vD_V4SI, operand_vA_V4SI, operand_vB_V4SI, operand_vC_NONE, fake_bit_field< bool, false >, 0 >(uint32); -template void powerpc_cpu::execute_vector_arith, 0 >(uint32); +template void powerpc_cpu::execute_vector_arith, 0 >(uint32); template void powerpc_cpu::execute_vector_arith, 0 >(uint32); template void powerpc_cpu::execute_vector_shift<-1>(uint32); template void powerpc_cpu::execute_vector_arith, operand_vD_V16QI, operand_vA_V16QI, operand_vB_V16QI, operand_vC_NONE, fake_bit_field< bool, false >, 0 >(uint32); diff --git a/SheepShaver/src/Unix/main_unix.cpp b/SheepShaver/src/Unix/main_unix.cpp index 34c104cc..0c5b76a1 100755 --- a/SheepShaver/src/Unix/main_unix.cpp +++ b/SheepShaver/src/Unix/main_unix.cpp @@ -133,6 +133,9 @@ #ifdef ENABLE_GTK #include +#if !defined(GDK_WINDOWING_QUARTZ) && !defined(GDK_WINDOWING_WAYLAND) +#include +#endif #endif #ifdef ENABLE_XF86_DGA @@ -728,6 +731,9 @@ static bool init_sdl() int main(int argc, char **argv) { +#if defined(ENABLE_GTK) && !defined(GDK_WINDOWING_QUARTZ) && !defined(GDK_WINDOWING_WAYLAND) + XInitThreads(); +#endif char str[256]; bool memory_mapped_from_zero, ram_rom_areas_contiguous; const char *vmdir = NULL; diff --git a/SheepShaver/src/Unix/timer_unix.cpp b/SheepShaver/src/Unix/timer_unix.cpp deleted file mode 100644 index 97372b49..00000000 --- a/SheepShaver/src/Unix/timer_unix.cpp +++ /dev/null @@ -1,401 +0,0 @@ -/* - * timer_unix.cpp - Time Manager emulation, Unix specific stuff - * - * Basilisk II (C) 1997-2008 Christian Bauer - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#include "sysdeps.h" -#include "macos_util.h" -#include "timer.h" - -#include - -#define DEBUG 0 -#include "debug.h" - -// For NetBSD with broken pthreads headers -#ifndef CLOCK_REALTIME -#define CLOCK_REALTIME 0 -#endif - -#if defined(__MACH__) -#include -#include - -static clock_serv_t host_clock; -static bool host_clock_inited = false; - -static inline void mach_current_time(tm_time_t &t) { - if(!host_clock_inited) { - host_get_clock_service(mach_host_self(), SYSTEM_CLOCK, &host_clock); - host_clock_inited = true; - } - - clock_get_time(host_clock, (mach_timespec_t *)&t); -} -#endif - - -/* - * Return microseconds since boot (64 bit) - */ - -void Microseconds(uint32 &hi, uint32 &lo) -{ - D(bug("Microseconds\n")); -#if defined(__MACH__) - tm_time_t t; - mach_current_time(t); - uint64 tl = (uint64)t.tv_sec * 1000000 + t.tv_nsec / 1000; -#elif defined(HAVE_CLOCK_GETTIME) - struct timespec t; - clock_gettime(CLOCK_REALTIME, &t); - uint64 tl = (uint64)t.tv_sec * 1000000 + t.tv_nsec / 1000; -#else - struct timeval t; - gettimeofday(&t, NULL); - uint64 tl = (uint64)t.tv_sec * 1000000 + t.tv_usec; -#endif - hi = tl >> 32; - lo = tl; -} - - -/* - * Return local date/time in Mac format (seconds since 1.1.1904) - */ - -uint32 TimerDateTime(void) -{ - return TimeToMacTime(time(NULL)); -} - - -/* - * Get current time - */ - -void timer_current_time(tm_time_t &t) -{ -#if defined(__MACH__) - mach_current_time(t); -#elif defined(HAVE_CLOCK_GETTIME) - clock_gettime(CLOCK_REALTIME, &t); -#else - gettimeofday(&t, NULL); -#endif -} - - -/* - * Add times - */ - -void timer_add_time(tm_time_t &res, tm_time_t a, tm_time_t b) -{ -#if defined(HAVE_CLOCK_GETTIME) || defined(__MACH__) - res.tv_sec = a.tv_sec + b.tv_sec; - res.tv_nsec = a.tv_nsec + b.tv_nsec; - if (res.tv_nsec >= 1000000000) { - res.tv_sec++; - res.tv_nsec -= 1000000000; - } -#else - res.tv_sec = a.tv_sec + b.tv_sec; - res.tv_usec = a.tv_usec + b.tv_usec; - if (res.tv_usec >= 1000000) { - res.tv_sec++; - res.tv_usec -= 1000000; - } -#endif -} - - -/* - * Subtract times - */ - -void timer_sub_time(tm_time_t &res, tm_time_t a, tm_time_t b) -{ -#if defined(HAVE_CLOCK_GETTIME) || defined(__MACH__) - res.tv_sec = a.tv_sec - b.tv_sec; - res.tv_nsec = a.tv_nsec - b.tv_nsec; - if (res.tv_nsec < 0) { - res.tv_sec--; - res.tv_nsec += 1000000000; - } -#else - res.tv_sec = a.tv_sec - b.tv_sec; - res.tv_usec = a.tv_usec - b.tv_usec; - if (res.tv_usec < 0) { - res.tv_sec--; - res.tv_usec += 1000000; - } -#endif -} - - -/* - * Compare times (<0: a < b, =0: a = b, >0: a > b) - */ - -int timer_cmp_time(tm_time_t a, tm_time_t b) -{ -#if defined(HAVE_CLOCK_GETTIME) || defined(__MACH__) - if (a.tv_sec == b.tv_sec) - return a.tv_nsec - b.tv_nsec; - else - return a.tv_sec - b.tv_sec; -#else - if (a.tv_sec == b.tv_sec) - return a.tv_usec - b.tv_usec; - else - return a.tv_sec - b.tv_sec; -#endif -} - - -/* - * Convert Mac time value (>0: microseconds, <0: microseconds) to tm_time_t - */ - -void timer_mac2host_time(tm_time_t &res, int32 mactime) -{ -#if defined(HAVE_CLOCK_GETTIME) || defined(__MACH__) - if (mactime > 0) { - // Time in milliseconds - res.tv_sec = mactime / 1000; - res.tv_nsec = (mactime % 1000) * 1000000; - } else { - // Time in negative microseconds - res.tv_sec = -mactime / 1000000; - res.tv_nsec = (-mactime % 1000000) * 1000; - } -#else - if (mactime > 0) { - // Time in milliseconds - res.tv_sec = mactime / 1000; - res.tv_usec = (mactime % 1000) * 1000; - } else { - // Time in negative microseconds - res.tv_sec = -mactime / 1000000; - res.tv_usec = -mactime % 1000000; - } -#endif -} - - -/* - * Convert positive tm_time_t to Mac time value (>0: microseconds, <0: microseconds) - * A negative input value for hosttime results in a zero return value - * As long as the microseconds value fits in 32 bit, it must not be converted to milliseconds! - */ - -int32 timer_host2mac_time(tm_time_t hosttime) -{ - if (hosttime.tv_sec < 0) - return 0; - else { -#if defined(HAVE_CLOCK_GETTIME) || defined(__MACH__) - uint64 t = (uint64)hosttime.tv_sec * 1000000 + hosttime.tv_nsec / 1000; -#else - uint64 t = (uint64)hosttime.tv_sec * 1000000 + hosttime.tv_usec; -#endif - if (t > 0x7fffffff) - return t / 1000; // Time in milliseconds - else - return -t; // Time in negative microseconds - } -} - - -/* - * Get current value of microsecond timer - */ - -uint64 GetTicks_usec(void) -{ -#if defined(__MACH__) - tm_time_t t; - mach_current_time(t); - return (uint64)t.tv_sec * 1000000 + t.tv_nsec / 1000; -#elif defined(HAVE_CLOCK_GETTIME) - struct timespec t; - clock_gettime(CLOCK_REALTIME, &t); - return (uint64)t.tv_sec * 1000000 + t.tv_nsec / 1000; -#else - struct timeval t; - gettimeofday(&t, NULL); - return (uint64)t.tv_sec * 1000000 + t.tv_usec; -#endif -} - - -/* - * Delay by specified number of microseconds (<1 second) - * (adapted from SDL_Delay() source; this function is designed to provide - * the highest accuracy possible) - */ - -#if defined(linux) -// Linux select() changes its timeout parameter upon return to contain -// the remaining time. Most other unixen leave it unchanged or undefined. -#define SELECT_SETS_REMAINING -#elif defined(__FreeBSD__) || defined(__sun__) || (defined(__MACH__) && defined(__APPLE__)) -#define USE_NANOSLEEP -#elif defined(HAVE_PTHREADS) && defined(sgi) -// SGI pthreads has a bug when using pthreads+signals+nanosleep, -// so instead of using nanosleep, wait on a CV which is never signalled. -#include -#define USE_COND_TIMEDWAIT -#endif - -void Delay_usec(uint64 usec) -{ - int was_error; - -#if defined(USE_NANOSLEEP) - struct timespec elapsed, tv; -#elif defined(USE_COND_TIMEDWAIT) - // Use a local mutex and cv, so threads remain independent - pthread_cond_t delay_cond = PTHREAD_COND_INITIALIZER; - pthread_mutex_t delay_mutex = PTHREAD_MUTEX_INITIALIZER; - struct timespec elapsed; - uint64 future; -#else - struct timeval tv; -#ifndef SELECT_SETS_REMAINING - uint64 then, now, elapsed; -#endif -#endif - - // Set the timeout interval - Linux only needs to do this once -#if defined(SELECT_SETS_REMAINING) - tv.tv_sec = 0; - tv.tv_usec = usec; -#elif defined(USE_NANOSLEEP) - elapsed.tv_sec = 0; - elapsed.tv_nsec = usec * 1000; -#elif defined(USE_COND_TIMEDWAIT) - future = GetTicks_usec() + usec; - elapsed.tv_sec = future / 1000000; - elapsed.tv_nsec = (future % 1000000) * 1000; -#else - then = GetTicks_usec(); -#endif - - do { - errno = 0; -#if defined(USE_NANOSLEEP) - tv.tv_sec = elapsed.tv_sec; - tv.tv_nsec = elapsed.tv_nsec; - was_error = nanosleep(&tv, &elapsed); -#elif defined(USE_COND_TIMEDWAIT) - was_error = pthread_mutex_lock(&delay_mutex); - was_error = pthread_cond_timedwait(&delay_cond, &delay_mutex, &elapsed); - was_error = pthread_mutex_unlock(&delay_mutex); -#else -#ifndef SELECT_SETS_REMAINING - // Calculate the time interval left (in case of interrupt) - now = GetTicks_usec(); - elapsed = now - then; - then = now; - if (elapsed >= usec) - break; - usec -= elapsed; - tv.tv_sec = 0; - tv.tv_usec = usec; -#endif - was_error = select(0, NULL, NULL, NULL, &tv); -#endif - } while (was_error && (errno == EINTR)); -} - - -/* - * Suspend emulator thread, virtual CPU in idle mode - */ - -#ifdef HAVE_PTHREADS -#if defined(HAVE_PTHREAD_COND_INIT) -#define IDLE_USES_COND_WAIT 1 -static pthread_mutex_t idle_lock = PTHREAD_MUTEX_INITIALIZER; -static pthread_cond_t idle_cond = PTHREAD_COND_INITIALIZER; -#elif defined(HAVE_SEM_INIT) -#define IDLE_USES_SEMAPHORE 1 -#include -#ifdef HAVE_SPINLOCKS -static spinlock_t idle_lock = SPIN_LOCK_UNLOCKED; -#define LOCK_IDLE spin_lock(&idle_lock) -#define UNLOCK_IDLE spin_unlock(&idle_lock) -#else -static pthread_mutex_t idle_lock = PTHREAD_MUTEX_INITIALIZER; -#define LOCK_IDLE pthread_mutex_lock(&idle_lock) -#define UNLOCK_IDLE pthread_mutex_unlock(&idle_lock) -#endif -static sem_t idle_sem; -static int idle_sem_ok = -1; -#endif -#endif - -void idle_wait(void) -{ -#ifdef IDLE_USES_COND_WAIT - pthread_mutex_lock(&idle_lock); - pthread_cond_wait(&idle_cond, &idle_lock); - pthread_mutex_unlock(&idle_lock); -#else -#ifdef IDLE_USES_SEMAPHORE - LOCK_IDLE; - if (idle_sem_ok < 0) - idle_sem_ok = (sem_init(&idle_sem, 0, 0) == 0); - if (idle_sem_ok > 0) { - idle_sem_ok++; - UNLOCK_IDLE; - sem_wait(&idle_sem); - return; - } - UNLOCK_IDLE; -#endif - - // Fallback: sleep 10 ms - Delay_usec(10000); -#endif -} - - -/* - * Resume execution of emulator thread, events just arrived - */ - -void idle_resume(void) -{ -#ifdef IDLE_USES_COND_WAIT - pthread_cond_signal(&idle_cond); -#else -#ifdef IDLE_USES_SEMAPHORE - LOCK_IDLE; - if (idle_sem_ok > 1) { - idle_sem_ok--; - UNLOCK_IDLE; - sem_post(&idle_sem); - return; - } - UNLOCK_IDLE; -#endif -#endif -} diff --git a/SheepShaver/src/Unix/timer_unix.cpp b/SheepShaver/src/Unix/timer_unix.cpp new file mode 120000 index 00000000..db93bbd3 --- /dev/null +++ b/SheepShaver/src/Unix/timer_unix.cpp @@ -0,0 +1 @@ +../../../BasiliskII/src/Unix/timer_unix.cpp \ No newline at end of file diff --git a/SheepShaver/src/Windows/Makefile.in b/SheepShaver/src/Windows/Makefile.in index 4c34ffac..cb7a0650 100755 --- a/SheepShaver/src/Windows/Makefile.in +++ b/SheepShaver/src/Windows/Makefile.in @@ -35,7 +35,7 @@ CC = @CC@ CXX = @CXX@ CFLAGS = @CFLAGS@ $(SDL_CFLAGS) CXXFLAGS = @CXXFLAGS@ $(SDL_CFLAGS) -CPPFLAGS = @CPPFLAGS@ -I../include -I. -I../slirp -I../Unix/dyngen_precompiled +CPPFLAGS = @CPPFLAGS@ -I../include -I. -I../slirp DEFS = @DEFS@ LDFLAGS = @LDFLAGS@ -Wl,-Bstatic #TODO remove pthread part of that if irrelevant @@ -44,6 +44,7 @@ CPUSRCS = @CPUSRCS@ PERL = @PERL@ USE_DYNGEN = @USE_DYNGEN@ +USE_PREGENERATED_DYNGEN = @USE_PREGENERATED_DYNGEN@ DYNGENSRCS = @DYNGENSRCS@ DYNGEN_CC = $(CXX) DYNGEN_OP_FLAGS = @DYNGEN_OP_FLAGS@ @@ -76,6 +77,7 @@ SRCS = ../main.cpp main_windows.cpp ../prefs.cpp ../prefs_items.cpp prefs_window UI_SRCS = ../prefs.cpp prefs_windows.cpp prefs_editor_gtk.cpp xpram_windows.cpp \ ../prefs_items.cpp ../user_strings.cpp user_strings_windows.cpp util_windows.cpp \ + ../dummy/prefs_dummy.cpp \ b2ether/packet32.cpp SheepShaverGUI.rc UI_APP = SheepShaverGUI.exe @@ -128,14 +130,15 @@ $(APP): $(XPLATSRCS) $(OBJ_DIR) $(OBJS) $(CXX) -o $(APP) $(LDFLAGS) $(OBJS) $(LIBS) $(SDL_LIBS) $(UI_APP): $(XPLATSRCS) $(OBJ_DIR) $(UI_OBJS) - $(CXX) -o $@ $(LDFLAGS) $(UI_OBJS) $(LIBS) $(GTK_LIBS) -mwindows -mno-cygwin + $(CXX) -o $@ $(LDFLAGS) $(UI_OBJS) $(LIBS) -Wl,-Bdynamic $(GTK_LIBS) -Wl,-Bstatic -mwindows -static-libgcc mostlyclean: rm -f $(APP) $(UI_APP) $(OBJ_DIR)/* core* *.core *~ *.bak -clean: mostlyclean +clean: mostlyclean dyngenclean rm -f $(XPLATSRCS) - rm -f dyngen basic-dyngen-ops.hpp ppc-dyngen-ops.hpp ppc-execute-impl.cpp +dyngenclean: + rm -f $(DYNGEN) basic-dyngen-ops.hpp ppc-dyngen-ops.hpp ppc-execute-impl.cpp distclean: clean rm -rf $(OBJ_DIR) @@ -163,7 +166,7 @@ $(OBJ_DIR)/%.o : %.S $(AS) $(ASFLAGS) -o $@ $*.out.s rm $*.out.s $(OBJ_DIR)/prefs_editor_gtk.o: prefs_editor_gtk.cpp - $(CXX) -O2 -mno-cygwin -mms-bitfields $(CPPFLAGS) $(DEFS) $(GTK_CFLAGS) -c $< -o $@ + $(CXX) -O2 -mms-bitfields $(CPPFLAGS) $(DEFS) $(GTK_CFLAGS) -c $< -o $@ # Windows resources $(OBJ_DIR)/%.o: %.rc @@ -176,36 +179,35 @@ DYNGEN = dyngen.exe ifeq ($(USE_DYNGEN),yes) DYNGENDEPS = basic-dyngen-ops.hpp ppc-dyngen-ops.hpp +dyngendeps: $(DYNGENDEPS) ### -basic-dyngen-ops.hpp: ../Unix/dyngen_precompiled/basic-dyngen-ops.hpp basic-dyngen-ops-x86_32.hpp basic-dyngen-ops-x86_64.hpp +$(OBJ_DIR)/basic-dyngen.o: basic-dyngen-ops.hpp +$(OBJ_DIR)/ppc-dyngen.o: ppc-dyngen-ops.hpp + +ifeq ($(USE_PREGENERATED_DYNGEN),yes) + +basic-dyngen-ops.hpp: cygwin_precompiled_dyngen/basic-dyngen-ops.hpp cp -f $< $@ -basic-dyngen-ops-x86_32.hpp: ../Unix/dyngen_precompiled/basic-dyngen-ops-x86_32.hpp - cp -f $< $@ -basic-dyngen-ops-x86_64.hpp: ../Unix/dyngen_precompiled/basic-dyngen-ops-x86_64.hpp - cp -f $< $@ -ppc-dyngen-ops.hpp: ../Unix/dyngen_precompiled/ppc-dyngen-ops.hpp ppc-dyngen-ops-x86_32.hpp ppc-dyngen-ops-x86_64.hpp - cp -f $< $@ -ppc-dyngen-ops-x86_32.hpp: ../Unix/dyngen_precompiled/ppc-dyngen-ops-x86_32.hpp - cp -f $< $@ -ppc-dyngen-ops-x86_64.hpp: ../Unix/dyngen_precompiled/ppc-dyngen-ops-x86_64.hpp +ppc-dyngen-ops.hpp: cygwin_precompiled_dyngen/ppc-dyngen-ops.hpp cp -f $< $@ + +else # Only GCC is supported for generating synthetic opcodes -#$(DYNGEN): $(DYNGENOBJS) -# $(HOST_CXX) -o $@ $(LDFLAGS) $(DYNGENOBJS) +$(DYNGEN): $(DYNGENOBJS) + $(HOST_CXX) -o $@ $(LDFLAGS) $(DYNGENOBJS) -#$(OBJ_DIR)/basic-dyngen.o: basic-dyngen-ops.hpp -#$(OBJ_DIR)/basic-dyngen-ops.o: $(kpxsrcdir)/cpu/jit/basic-dyngen-ops.cpp -# $(DYNGEN_CC) $(CPPFLAGS) $(DEFS) $(CXXFLAGS) $(DYNGEN_OP_FLAGS) -c $< -o $@ -#basic-dyngen-ops.hpp: $(OBJ_DIR)/basic-dyngen-ops.o $(DYNGEN) -# ./$(DYNGEN) -o $@ $< +$(OBJ_DIR)/basic-dyngen-ops.o: $(kpxsrcdir)/cpu/jit/basic-dyngen-ops.cpp + $(DYNGEN_CC) $(CPPFLAGS) $(DEFS) $(CXXFLAGS) $(DYNGEN_OP_FLAGS) -c $< -o $@ +basic-dyngen-ops.hpp: $(OBJ_DIR)/basic-dyngen-ops.o $(DYNGEN) + ./$(DYNGEN) -o $@ $< -#$(OBJ_DIR)/ppc-dyngen.o: ppc-dyngen-ops.hpp -#$(OBJ_DIR)/ppc-dyngen-ops.o: $(kpxsrcdir)/cpu/ppc/ppc-dyngen-ops.cpp basic-dyngen-ops.hpp -# $(DYNGEN_CC) $(CPPFLAGS) $(DEFS) $(CXXFLAGS) $(DYNGEN_OP_FLAGS) -c $< -o $@ -#ppc-dyngen-ops.hpp: $(OBJ_DIR)/ppc-dyngen-ops.o $(DYNGEN) -# ./$(DYNGEN) -o $@ $< +$(OBJ_DIR)/ppc-dyngen-ops.o: $(kpxsrcdir)/cpu/ppc/ppc-dyngen-ops.cpp basic-dyngen-ops.hpp + $(DYNGEN_CC) $(CPPFLAGS) $(DEFS) $(CXXFLAGS) $(DYNGEN_OP_FLAGS) -c $< -o $@ +ppc-dyngen-ops.hpp: $(OBJ_DIR)/ppc-dyngen-ops.o $(DYNGEN) + ./$(DYNGEN) -o $@ $< +endif $(OBJ_DIR)/sheepshaver_glue.o $(OBJ_DIR)/ppc-cpu.o $(OBJ_DIR)/ppc-decode.o $(OBJ_DIR)/ppc-translate.o $(OBJ_DIR)/ppc-jit.o: basic-dyngen-ops.hpp ppc-dyngen-ops.hpp endif diff --git a/SheepShaver/src/Windows/configure.ac b/SheepShaver/src/Windows/configure.ac index 21571618..67d4adf2 100644 --- a/SheepShaver/src/Windows/configure.ac +++ b/SheepShaver/src/Windows/configure.ac @@ -12,7 +12,7 @@ AC_CANONICAL_HOST AC_CANONICAL_TARGET dnl Options. -AC_ARG_ENABLE(jit, [ --enable-jit enable JIT compiler [default=yes]], [WANT_JIT=$enableval], [WANT_JIT=no]) +AC_ARG_ENABLE(jit, [ --enable-jit enable JIT compiler [default=yes]], [WANT_JIT=$enableval], [WANT_JIT=yes]) AC_ARG_WITH(gtk, [ --with-gtk use GTK user interface [default=yes]], [WANT_GTK=$withval], [WANT_GTK=yes]) AC_ARG_ENABLE(vosf, [ --enable-vosf enable video on SEGV signals [default=yes]], [WANT_VOSF=$enableval], [WANT_VOSF=yes]) @@ -192,6 +192,13 @@ if [[ "x$HAVE_GCC30" = "xyes" ]]; then CFLAGS="$SAVED_CFLAGS" fi +case $host_os in +cygwin) + CFLAGS="$CFLAGS -mwin32" + CXXFLAGS="$CXXFLAGS -mwin32" + ;; +esac + dnl CPU emulator sources CPUSRCS="\ ../kpx_cpu/src/mathlib/ieeefp.cpp \ @@ -205,6 +212,7 @@ CPPFLAGS="$CPPFLAGS -I../kpx_cpu/include -I../kpx_cpu/src" dnl Enable JIT compiler, if possible USE_DYNGEN="no" +USE_PREGENERATED_DYNGEN="no" if [[ "x$WANT_JIT" = "xyes" ]]; then case $host_cpu in i?86) @@ -216,6 +224,16 @@ if [[ "x$WANT_JIT" = "xyes" ]]; then fi ;; esac + + case $host_os in + cygwin) + USE_PREGENERATED_DYNGEN="no" + ;; + *) + USE_PREGENERATED_DYNGEN="yes" + ;; + esac + USE_DYNGEN="yes" DYNGEN_OP_FLAGS="$DYNGEN_OP_FLAGS -finline-limit=10000 -g0" if [[ "x$HAVE_GCC30" = "xyes" ]]; then @@ -256,6 +274,7 @@ fi dnl Generate Makefile. AC_SUBST(PERL) AC_SUBST(USE_DYNGEN) +AC_SUBST(USE_PREGENERATED_DYNGEN) AC_SUBST(DYNGENSRCS) AC_SUBST(DYNGEN_OP_FLAGS) AC_SUBST(CPUSRCS) diff --git a/SheepShaver/src/Windows/cygwin_precompiled_dyngen/basic-dyngen-ops.hpp b/SheepShaver/src/Windows/cygwin_precompiled_dyngen/basic-dyngen-ops.hpp new file mode 100644 index 00000000..de8b740f --- /dev/null +++ b/SheepShaver/src/Windows/cygwin_precompiled_dyngen/basic-dyngen-ops.hpp @@ -0,0 +1,1684 @@ +#ifndef DEFINE_CST +#define DEFINE_CST(NAME, VALUE) +#endif +DEFINE_GEN(gen_op_mov_ad_A0_im,void,(long param1)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_mov_ad_A0_im +{ + static const uint8 op_mov_ad_A0_im_code[] = { + 0xbb, 0x00, 0x00, 0x00, 0x00 + }; + copy_block(op_mov_ad_A0_im_code, 5); + *(uint32_t *)(code_ptr() + 1) = param1 + 0; + inc_code_ptr(5); +} +#endif + +DEFINE_GEN(gen_op_mov_ad_A1_im,void,(long param1)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_mov_ad_A1_im +{ + static const uint8 op_mov_ad_A1_im_code[] = { + 0xbe, 0x00, 0x00, 0x00, 0x00 + }; + copy_block(op_mov_ad_A1_im_code, 5); + *(uint32_t *)(code_ptr() + 1) = param1 + 0; + inc_code_ptr(5); +} +#endif + +DEFINE_GEN(gen_op_mov_ad_A2_im,void,(long param1)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_mov_ad_A2_im +{ + static const uint8 op_mov_ad_A2_im_code[] = { + 0xbf, 0x00, 0x00, 0x00, 0x00 + }; + copy_block(op_mov_ad_A2_im_code, 5); + *(uint32_t *)(code_ptr() + 1) = param1 + 0; + inc_code_ptr(5); +} +#endif + +DEFINE_GEN(gen_op_mov_32_T0_im,void,(long param1)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_mov_32_T0_im +{ + static const uint8 op_mov_32_T0_im_code[] = { + 0xbb, 0x00, 0x00, 0x00, 0x00 + }; + copy_block(op_mov_32_T0_im_code, 5); + *(uint32_t *)(code_ptr() + 1) = param1 + 0; + inc_code_ptr(5); +} +#endif + +DEFINE_GEN(gen_op_mov_32_T0_T1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_mov_32_T0_T1 +{ + static const uint8 op_mov_32_T0_T1_code[] = { + 0x89, 0xf3 + }; + copy_block(op_mov_32_T0_T1_code, 2); + inc_code_ptr(2); +} +#endif + +DEFINE_GEN(gen_op_mov_32_T0_T2,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_mov_32_T0_T2 +{ + static const uint8 op_mov_32_T0_T2_code[] = { + 0x89, 0xfb + }; + copy_block(op_mov_32_T0_T2_code, 2); + inc_code_ptr(2); +} +#endif + +DEFINE_GEN(gen_op_mov_32_T1_im,void,(long param1)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_mov_32_T1_im +{ + static const uint8 op_mov_32_T1_im_code[] = { + 0xbe, 0x00, 0x00, 0x00, 0x00 + }; + copy_block(op_mov_32_T1_im_code, 5); + *(uint32_t *)(code_ptr() + 1) = param1 + 0; + inc_code_ptr(5); +} +#endif + +DEFINE_GEN(gen_op_mov_32_T1_T0,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_mov_32_T1_T0 +{ + static const uint8 op_mov_32_T1_T0_code[] = { + 0x89, 0xde + }; + copy_block(op_mov_32_T1_T0_code, 2); + inc_code_ptr(2); +} +#endif + +DEFINE_GEN(gen_op_mov_32_T1_T2,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_mov_32_T1_T2 +{ + static const uint8 op_mov_32_T1_T2_code[] = { + 0x89, 0xfe + }; + copy_block(op_mov_32_T1_T2_code, 2); + inc_code_ptr(2); +} +#endif + +DEFINE_GEN(gen_op_mov_32_T2_im,void,(long param1)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_mov_32_T2_im +{ + static const uint8 op_mov_32_T2_im_code[] = { + 0xbf, 0x00, 0x00, 0x00, 0x00 + }; + copy_block(op_mov_32_T2_im_code, 5); + *(uint32_t *)(code_ptr() + 1) = param1 + 0; + inc_code_ptr(5); +} +#endif + +DEFINE_GEN(gen_op_mov_32_T2_T1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_mov_32_T2_T1 +{ + static const uint8 op_mov_32_T2_T1_code[] = { + 0x89, 0xf7 + }; + copy_block(op_mov_32_T2_T1_code, 2); + inc_code_ptr(2); +} +#endif + +DEFINE_GEN(gen_op_mov_32_T2_T0,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_mov_32_T2_T0 +{ + static const uint8 op_mov_32_T2_T0_code[] = { + 0x89, 0xdf + }; + copy_block(op_mov_32_T2_T0_code, 2); + inc_code_ptr(2); +} +#endif + +DEFINE_GEN(gen_op_mov_32_T0_0,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_mov_32_T0_0 +{ + static const uint8 op_mov_32_T0_0_code[] = { + 0x31, 0xdb + }; + copy_block(op_mov_32_T0_0_code, 2); + inc_code_ptr(2); +} +#endif + +DEFINE_GEN(gen_op_mov_32_T1_0,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_mov_32_T1_0 +{ + static const uint8 op_mov_32_T1_0_code[] = { + 0x31, 0xf6 + }; + copy_block(op_mov_32_T1_0_code, 2); + inc_code_ptr(2); +} +#endif + +DEFINE_GEN(gen_op_mov_32_T2_0,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_mov_32_T2_0 +{ + static const uint8 op_mov_32_T2_0_code[] = { + 0x31, 0xff + }; + copy_block(op_mov_32_T2_0_code, 2); + inc_code_ptr(2); +} +#endif + +DEFINE_GEN(gen_op_add_32_T0_T2,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_add_32_T0_T2 +{ + static const uint8 op_add_32_T0_T2_code[] = { + 0x01, 0xfb + }; + copy_block(op_add_32_T0_T2_code, 2); + inc_code_ptr(2); +} +#endif + +DEFINE_GEN(gen_op_add_32_T0_T1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_add_32_T0_T1 +{ + static const uint8 op_add_32_T0_T1_code[] = { + 0x01, 0xf3 + }; + copy_block(op_add_32_T0_T1_code, 2); + inc_code_ptr(2); +} +#endif + +DEFINE_GEN(gen_op_add_32_T0_im,void,(long param1)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_add_32_T0_im +{ + static const uint8 op_add_32_T0_im_code[] = { + 0x81, 0xc3, 0x00, 0x00, 0x00, 0x00 + }; + copy_block(op_add_32_T0_im_code, 6); + *(uint32_t *)(code_ptr() + 2) = param1 + 0; + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_add_32_T0_1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_add_32_T0_1 +{ + static const uint8 op_add_32_T0_1_code[] = { + 0x43 + }; + copy_block(op_add_32_T0_1_code, 1); + inc_code_ptr(1); +} +#endif + +DEFINE_GEN(gen_op_add_32_T0_2,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_add_32_T0_2 +{ + static const uint8 op_add_32_T0_2_code[] = { + 0x83, 0xc3, 0x02 + }; + copy_block(op_add_32_T0_2_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_add_32_T0_4,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_add_32_T0_4 +{ + static const uint8 op_add_32_T0_4_code[] = { + 0x83, 0xc3, 0x04 + }; + copy_block(op_add_32_T0_4_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_add_32_T0_8,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_add_32_T0_8 +{ + static const uint8 op_add_32_T0_8_code[] = { + 0x83, 0xc3, 0x08 + }; + copy_block(op_add_32_T0_8_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_sub_32_T0_T2,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_sub_32_T0_T2 +{ + static const uint8 op_sub_32_T0_T2_code[] = { + 0x29, 0xfb + }; + copy_block(op_sub_32_T0_T2_code, 2); + inc_code_ptr(2); +} +#endif + +DEFINE_GEN(gen_op_sub_32_T0_T1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_sub_32_T0_T1 +{ + static const uint8 op_sub_32_T0_T1_code[] = { + 0x29, 0xf3 + }; + copy_block(op_sub_32_T0_T1_code, 2); + inc_code_ptr(2); +} +#endif + +DEFINE_GEN(gen_op_sub_32_T0_im,void,(long param1)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_sub_32_T0_im +{ + static const uint8 op_sub_32_T0_im_code[] = { + 0x81, 0xeb, 0x00, 0x00, 0x00, 0x00 + }; + copy_block(op_sub_32_T0_im_code, 6); + *(uint32_t *)(code_ptr() + 2) = param1 + 0; + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_sub_32_T0_1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_sub_32_T0_1 +{ + static const uint8 op_sub_32_T0_1_code[] = { + 0x4b + }; + copy_block(op_sub_32_T0_1_code, 1); + inc_code_ptr(1); +} +#endif + +DEFINE_GEN(gen_op_sub_32_T0_2,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_sub_32_T0_2 +{ + static const uint8 op_sub_32_T0_2_code[] = { + 0x83, 0xeb, 0x02 + }; + copy_block(op_sub_32_T0_2_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_sub_32_T0_4,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_sub_32_T0_4 +{ + static const uint8 op_sub_32_T0_4_code[] = { + 0x83, 0xeb, 0x04 + }; + copy_block(op_sub_32_T0_4_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_sub_32_T0_8,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_sub_32_T0_8 +{ + static const uint8 op_sub_32_T0_8_code[] = { + 0x83, 0xeb, 0x08 + }; + copy_block(op_sub_32_T0_8_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_add_32_T1_T2,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_add_32_T1_T2 +{ + static const uint8 op_add_32_T1_T2_code[] = { + 0x01, 0xfe + }; + copy_block(op_add_32_T1_T2_code, 2); + inc_code_ptr(2); +} +#endif + +DEFINE_GEN(gen_op_add_32_T1_T0,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_add_32_T1_T0 +{ + static const uint8 op_add_32_T1_T0_code[] = { + 0x01, 0xde + }; + copy_block(op_add_32_T1_T0_code, 2); + inc_code_ptr(2); +} +#endif + +DEFINE_GEN(gen_op_add_32_T1_im,void,(long param1)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_add_32_T1_im +{ + static const uint8 op_add_32_T1_im_code[] = { + 0x81, 0xc6, 0x00, 0x00, 0x00, 0x00 + }; + copy_block(op_add_32_T1_im_code, 6); + *(uint32_t *)(code_ptr() + 2) = param1 + 0; + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_add_32_T1_1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_add_32_T1_1 +{ + static const uint8 op_add_32_T1_1_code[] = { + 0x46 + }; + copy_block(op_add_32_T1_1_code, 1); + inc_code_ptr(1); +} +#endif + +DEFINE_GEN(gen_op_add_32_T1_2,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_add_32_T1_2 +{ + static const uint8 op_add_32_T1_2_code[] = { + 0x83, 0xc6, 0x02 + }; + copy_block(op_add_32_T1_2_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_add_32_T1_4,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_add_32_T1_4 +{ + static const uint8 op_add_32_T1_4_code[] = { + 0x83, 0xc6, 0x04 + }; + copy_block(op_add_32_T1_4_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_add_32_T1_8,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_add_32_T1_8 +{ + static const uint8 op_add_32_T1_8_code[] = { + 0x83, 0xc6, 0x08 + }; + copy_block(op_add_32_T1_8_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_sub_32_T1_T2,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_sub_32_T1_T2 +{ + static const uint8 op_sub_32_T1_T2_code[] = { + 0x29, 0xfe + }; + copy_block(op_sub_32_T1_T2_code, 2); + inc_code_ptr(2); +} +#endif + +DEFINE_GEN(gen_op_sub_32_T1_T0,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_sub_32_T1_T0 +{ + static const uint8 op_sub_32_T1_T0_code[] = { + 0x29, 0xde + }; + copy_block(op_sub_32_T1_T0_code, 2); + inc_code_ptr(2); +} +#endif + +DEFINE_GEN(gen_op_sub_32_T1_im,void,(long param1)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_sub_32_T1_im +{ + static const uint8 op_sub_32_T1_im_code[] = { + 0x81, 0xee, 0x00, 0x00, 0x00, 0x00 + }; + copy_block(op_sub_32_T1_im_code, 6); + *(uint32_t *)(code_ptr() + 2) = param1 + 0; + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_sub_32_T1_1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_sub_32_T1_1 +{ + static const uint8 op_sub_32_T1_1_code[] = { + 0x4e + }; + copy_block(op_sub_32_T1_1_code, 1); + inc_code_ptr(1); +} +#endif + +DEFINE_GEN(gen_op_sub_32_T1_2,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_sub_32_T1_2 +{ + static const uint8 op_sub_32_T1_2_code[] = { + 0x83, 0xee, 0x02 + }; + copy_block(op_sub_32_T1_2_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_sub_32_T1_4,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_sub_32_T1_4 +{ + static const uint8 op_sub_32_T1_4_code[] = { + 0x83, 0xee, 0x04 + }; + copy_block(op_sub_32_T1_4_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_sub_32_T1_8,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_sub_32_T1_8 +{ + static const uint8 op_sub_32_T1_8_code[] = { + 0x83, 0xee, 0x08 + }; + copy_block(op_sub_32_T1_8_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_umul_32_T0_T1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_umul_32_T0_T1 +{ + static const uint8 op_umul_32_T0_T1_code[] = { + 0x0f, 0xaf, 0xde + }; + copy_block(op_umul_32_T0_T1_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_smul_32_T0_T1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_smul_32_T0_T1 +{ + static const uint8 op_smul_32_T0_T1_code[] = { + 0x0f, 0xaf, 0xde + }; + copy_block(op_smul_32_T0_T1_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_udiv_32_T0_T1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_udiv_32_T0_T1 +{ + static const uint8 op_udiv_32_T0_T1_code[] = { + 0x89, 0xd8, 0x31, 0xd2, 0xf7, 0xf6, 0x89, 0xc3 + }; + copy_block(op_udiv_32_T0_T1_code, 8); + inc_code_ptr(8); +} +#endif + +DEFINE_GEN(gen_op_sdiv_32_T0_T1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_sdiv_32_T0_T1 +{ + static const uint8 op_sdiv_32_T0_T1_code[] = { + 0x89, 0xd8, 0x99, 0xf7, 0xfe, 0x89, 0xc3 + }; + copy_block(op_sdiv_32_T0_T1_code, 7); + inc_code_ptr(7); +} +#endif + +DEFINE_GEN(gen_op_xchg_32_T0_T1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_xchg_32_T0_T1 +{ + static const uint8 op_xchg_32_T0_T1_code[] = { + 0x87, 0xde + }; + copy_block(op_xchg_32_T0_T1_code, 2); + inc_code_ptr(2); +} +#endif + +DEFINE_GEN(gen_op_bswap_16_T0,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_bswap_16_T0 +{ + static const uint8 op_bswap_16_T0_code[] = { + 0x0f, 0xb7, 0xc3, 0x66, 0xc1, 0xc0, 0x08, 0x0f, 0xb7, 0xd8 + }; + copy_block(op_bswap_16_T0_code, 10); + inc_code_ptr(10); +} +#endif + +DEFINE_GEN(gen_op_bswap_32_T0,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_bswap_32_T0 +{ + static const uint8 op_bswap_32_T0_code[] = { + 0x0f, 0xcb + }; + copy_block(op_bswap_32_T0_code, 2); + inc_code_ptr(2); +} +#endif + +DEFINE_GEN(gen_op_neg_32_T0,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_neg_32_T0 +{ + static const uint8 op_neg_32_T0_code[] = { + 0xf7, 0xdb + }; + copy_block(op_neg_32_T0_code, 2); + inc_code_ptr(2); +} +#endif + +DEFINE_GEN(gen_op_not_32_T0,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_not_32_T0 +{ + static const uint8 op_not_32_T0_code[] = { + 0x85, 0xdb, 0x0f, 0x94, 0xc0, 0x0f, 0xb6, 0xd8 + }; + copy_block(op_not_32_T0_code, 8); + inc_code_ptr(8); +} +#endif + +DEFINE_GEN(gen_op_not_32_T1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_not_32_T1 +{ + static const uint8 op_not_32_T1_code[] = { + 0x85, 0xf6, 0x0f, 0x94, 0xc0, 0x0f, 0xb6, 0xf0 + }; + copy_block(op_not_32_T1_code, 8); + inc_code_ptr(8); +} +#endif + +DEFINE_GEN(gen_op_and_32_T0_T1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_and_32_T0_T1 +{ + static const uint8 op_and_32_T0_T1_code[] = { + 0x21, 0xf3 + }; + copy_block(op_and_32_T0_T1_code, 2); + inc_code_ptr(2); +} +#endif + +DEFINE_GEN(gen_op_and_32_T0_im,void,(long param1)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_and_32_T0_im +{ + static const uint8 op_and_32_T0_im_code[] = { + 0x81, 0xe3, 0x00, 0x00, 0x00, 0x00 + }; + copy_block(op_and_32_T0_im_code, 6); + *(uint32_t *)(code_ptr() + 2) = param1 + 0; + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_or_32_T0_T1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_or_32_T0_T1 +{ + static const uint8 op_or_32_T0_T1_code[] = { + 0x09, 0xf3 + }; + copy_block(op_or_32_T0_T1_code, 2); + inc_code_ptr(2); +} +#endif + +DEFINE_GEN(gen_op_or_32_T0_im,void,(long param1)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_or_32_T0_im +{ + static const uint8 op_or_32_T0_im_code[] = { + 0x81, 0xcb, 0x00, 0x00, 0x00, 0x00 + }; + copy_block(op_or_32_T0_im_code, 6); + *(uint32_t *)(code_ptr() + 2) = param1 + 0; + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_xor_32_T0_T1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_xor_32_T0_T1 +{ + static const uint8 op_xor_32_T0_T1_code[] = { + 0x31, 0xf3 + }; + copy_block(op_xor_32_T0_T1_code, 2); + inc_code_ptr(2); +} +#endif + +DEFINE_GEN(gen_op_xor_32_T0_im,void,(long param1)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_xor_32_T0_im +{ + static const uint8 op_xor_32_T0_im_code[] = { + 0x81, 0xf3, 0x00, 0x00, 0x00, 0x00 + }; + copy_block(op_xor_32_T0_im_code, 6); + *(uint32_t *)(code_ptr() + 2) = param1 + 0; + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_orc_32_T0_T1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_orc_32_T0_T1 +{ + static const uint8 op_orc_32_T0_T1_code[] = { + 0x89, 0xf0, 0xf7, 0xd0, 0x09, 0xc3 + }; + copy_block(op_orc_32_T0_T1_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_andc_32_T0_T1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_andc_32_T0_T1 +{ + static const uint8 op_andc_32_T0_T1_code[] = { + 0x89, 0xf0, 0xf7, 0xd0, 0x21, 0xc3 + }; + copy_block(op_andc_32_T0_T1_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_nand_32_T0_T1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_nand_32_T0_T1 +{ + static const uint8 op_nand_32_T0_T1_code[] = { + 0x89, 0xd8, 0x21, 0xf0, 0x89, 0xc3, 0xf7, 0xd3 + }; + copy_block(op_nand_32_T0_T1_code, 8); + inc_code_ptr(8); +} +#endif + +DEFINE_GEN(gen_op_nor_32_T0_T1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_nor_32_T0_T1 +{ + static const uint8 op_nor_32_T0_T1_code[] = { + 0x89, 0xd8, 0x09, 0xf0, 0x89, 0xc3, 0xf7, 0xd3 + }; + copy_block(op_nor_32_T0_T1_code, 8); + inc_code_ptr(8); +} +#endif + +DEFINE_GEN(gen_op_eqv_32_T0_T1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_eqv_32_T0_T1 +{ + static const uint8 op_eqv_32_T0_T1_code[] = { + 0x89, 0xd8, 0x31, 0xf0, 0x89, 0xc3, 0xf7, 0xd3 + }; + copy_block(op_eqv_32_T0_T1_code, 8); + inc_code_ptr(8); +} +#endif + +DEFINE_GEN(gen_op_lsl_32_T0_T1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_lsl_32_T0_T1 +{ + static const uint8 op_lsl_32_T0_T1_code[] = { + 0x89, 0xf1, 0xd3, 0xe3 + }; + copy_block(op_lsl_32_T0_T1_code, 4); + inc_code_ptr(4); +} +#endif + +DEFINE_GEN(gen_op_lsl_32_T0_im,void,(long param1)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_lsl_32_T0_im +{ + static const uint8 op_lsl_32_T0_im_code[] = { + 0xb8, 0x00, 0x00, 0x00, 0x00, 0x88, 0xc1, 0xd3, 0xe3 + }; + copy_block(op_lsl_32_T0_im_code, 9); + *(uint32_t *)(code_ptr() + 1) = param1 + 0; + inc_code_ptr(9); +} +#endif + +DEFINE_GEN(gen_op_lsr_32_T0_T1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_lsr_32_T0_T1 +{ + static const uint8 op_lsr_32_T0_T1_code[] = { + 0x89, 0xf1, 0xd3, 0xeb + }; + copy_block(op_lsr_32_T0_T1_code, 4); + inc_code_ptr(4); +} +#endif + +DEFINE_GEN(gen_op_lsr_32_T0_im,void,(long param1)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_lsr_32_T0_im +{ + static const uint8 op_lsr_32_T0_im_code[] = { + 0xb8, 0x00, 0x00, 0x00, 0x00, 0x88, 0xc1, 0xd3, 0xeb + }; + copy_block(op_lsr_32_T0_im_code, 9); + *(uint32_t *)(code_ptr() + 1) = param1 + 0; + inc_code_ptr(9); +} +#endif + +DEFINE_GEN(gen_op_asr_32_T0_T1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_asr_32_T0_T1 +{ + static const uint8 op_asr_32_T0_T1_code[] = { + 0x89, 0xf1, 0xd3, 0xfb + }; + copy_block(op_asr_32_T0_T1_code, 4); + inc_code_ptr(4); +} +#endif + +DEFINE_GEN(gen_op_asr_32_T0_im,void,(long param1)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_asr_32_T0_im +{ + static const uint8 op_asr_32_T0_im_code[] = { + 0xb8, 0x00, 0x00, 0x00, 0x00, 0x88, 0xc1, 0xd3, 0xfb + }; + copy_block(op_asr_32_T0_im_code, 9); + *(uint32_t *)(code_ptr() + 1) = param1 + 0; + inc_code_ptr(9); +} +#endif + +DEFINE_GEN(gen_op_rol_32_T0_T1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_rol_32_T0_T1 +{ + static const uint8 op_rol_32_T0_T1_code[] = { + 0x89, 0xf1, 0xd3, 0xc3 + }; + copy_block(op_rol_32_T0_T1_code, 4); + inc_code_ptr(4); +} +#endif + +DEFINE_GEN(gen_op_rol_32_T0_im,void,(long param1)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_rol_32_T0_im +{ + static const uint8 op_rol_32_T0_im_code[] = { + 0xb8, 0x00, 0x00, 0x00, 0x00, 0x88, 0xc1, 0xd3, 0xc3 + }; + copy_block(op_rol_32_T0_im_code, 9); + *(uint32_t *)(code_ptr() + 1) = param1 + 0; + inc_code_ptr(9); +} +#endif + +DEFINE_GEN(gen_op_ror_32_T0_T1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_ror_32_T0_T1 +{ + static const uint8 op_ror_32_T0_T1_code[] = { + 0x89, 0xf1, 0xd3, 0xcb + }; + copy_block(op_ror_32_T0_T1_code, 4); + inc_code_ptr(4); +} +#endif + +DEFINE_GEN(gen_op_ror_32_T0_im,void,(long param1)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_ror_32_T0_im +{ + static const uint8 op_ror_32_T0_im_code[] = { + 0xb8, 0x00, 0x00, 0x00, 0x00, 0x88, 0xc1, 0xd3, 0xcb + }; + copy_block(op_ror_32_T0_im_code, 9); + *(uint32_t *)(code_ptr() + 1) = param1 + 0; + inc_code_ptr(9); +} +#endif + +DEFINE_GEN(gen_op_se_16_32_T0,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_se_16_32_T0 +{ + static const uint8 op_se_16_32_T0_code[] = { + 0x0f, 0xbf, 0xdb + }; + copy_block(op_se_16_32_T0_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_se_16_32_T1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_se_16_32_T1 +{ + static const uint8 op_se_16_32_T1_code[] = { + 0x0f, 0xbf, 0xf6 + }; + copy_block(op_se_16_32_T1_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_ze_16_32_T0,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_ze_16_32_T0 +{ + static const uint8 op_ze_16_32_T0_code[] = { + 0x0f, 0xb7, 0xdb + }; + copy_block(op_ze_16_32_T0_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_se_8_32_T0,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_se_8_32_T0 +{ + static const uint8 op_se_8_32_T0_code[] = { + 0x0f, 0xbe, 0xdb + }; + copy_block(op_se_8_32_T0_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_ze_8_32_T0,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_ze_8_32_T0 +{ + static const uint8 op_ze_8_32_T0_code[] = { + 0x0f, 0xb6, 0xdb + }; + copy_block(op_ze_8_32_T0_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_load_u32_T0_T1_0,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_u32_T0_T1_0 +{ + static const uint8 op_load_u32_T0_T1_0_code[] = { + 0x8b, 0x86, 0x00, 0x00, 0x00, 0x11, 0x89, 0xc3, 0x0f, 0xcb + }; + copy_block(op_load_u32_T0_T1_0_code, 10); + inc_code_ptr(10); +} +#endif + +DEFINE_GEN(gen_op_load_s32_T0_T1_0,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_s32_T0_T1_0 +{ + static const uint8 op_load_s32_T0_T1_0_code[] = { + 0x8b, 0x86, 0x00, 0x00, 0x00, 0x11, 0x89, 0xc3, 0x0f, 0xcb + }; + copy_block(op_load_s32_T0_T1_0_code, 10); + inc_code_ptr(10); +} +#endif + +DEFINE_GEN(gen_op_store_32_T0_T1_0,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_32_T0_T1_0 +{ + static const uint8 op_store_32_T0_T1_0_code[] = { + 0x89, 0xd8, 0x0f, 0xc8, 0x89, 0x86, 0x00, 0x00, 0x00, 0x11 + }; + copy_block(op_store_32_T0_T1_0_code, 10); + inc_code_ptr(10); +} +#endif + +DEFINE_GEN(gen_op_load_u32_T0_T1_im,void,(long param1)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_u32_T0_T1_im +{ + static const uint8 op_load_u32_T0_T1_im_code[] = { + 0x8b, 0x86, 0x00, 0x00, 0x00, 0x11, 0x89, 0xc3, 0x0f, 0xcb + }; + copy_block(op_load_u32_T0_T1_im_code, 10); + *(uint32_t *)(code_ptr() + 2) = param1 + 285212672; + inc_code_ptr(10); +} +#endif + +DEFINE_GEN(gen_op_load_s32_T0_T1_im,void,(long param1)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_s32_T0_T1_im +{ + static const uint8 op_load_s32_T0_T1_im_code[] = { + 0x8b, 0x86, 0x00, 0x00, 0x00, 0x11, 0x89, 0xc3, 0x0f, 0xcb + }; + copy_block(op_load_s32_T0_T1_im_code, 10); + *(uint32_t *)(code_ptr() + 2) = param1 + 285212672; + inc_code_ptr(10); +} +#endif + +DEFINE_GEN(gen_op_store_32_T0_T1_im,void,(long param1)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_32_T0_T1_im +{ + static const uint8 op_store_32_T0_T1_im_code[] = { + 0x8d, 0x96, 0x00, 0x00, 0x00, 0x00, 0x89, 0xd8, 0x0f, 0xc8, 0x89, 0x82, + 0x00, 0x00, 0x00, 0x11 + }; + copy_block(op_store_32_T0_T1_im_code, 16); + *(uint32_t *)(code_ptr() + 2) = param1 + 0; + inc_code_ptr(16); +} +#endif + +DEFINE_GEN(gen_op_load_u32_T0_T1_T2,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_u32_T0_T1_T2 +{ + static const uint8 op_load_u32_T0_T1_T2_code[] = { + 0x8b, 0x84, 0x3e, 0x00, 0x00, 0x00, 0x11, 0x89, 0xc3, 0x0f, 0xcb + }; + copy_block(op_load_u32_T0_T1_T2_code, 11); + inc_code_ptr(11); +} +#endif + +DEFINE_GEN(gen_op_load_s32_T0_T1_T2,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_s32_T0_T1_T2 +{ + static const uint8 op_load_s32_T0_T1_T2_code[] = { + 0x8b, 0x84, 0x3e, 0x00, 0x00, 0x00, 0x11, 0x89, 0xc3, 0x0f, 0xcb + }; + copy_block(op_load_s32_T0_T1_T2_code, 11); + inc_code_ptr(11); +} +#endif + +DEFINE_GEN(gen_op_store_32_T0_T1_T2,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_32_T0_T1_T2 +{ + static const uint8 op_store_32_T0_T1_T2_code[] = { + 0x8d, 0x14, 0x3e, 0x89, 0xd8, 0x0f, 0xc8, 0x89, 0x82, 0x00, 0x00, 0x00, + 0x11 + }; + copy_block(op_store_32_T0_T1_T2_code, 13); + inc_code_ptr(13); +} +#endif + +DEFINE_GEN(gen_op_load_u16_T0_T1_0,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_u16_T0_T1_0 +{ + static const uint8 op_load_u16_T0_T1_0_code[] = { + 0x0f, 0xb7, 0x86, 0x00, 0x00, 0x00, 0x11, 0x66, 0xc1, 0xc0, 0x08, 0x0f, + 0xb7, 0xd8 + }; + copy_block(op_load_u16_T0_T1_0_code, 14); + inc_code_ptr(14); +} +#endif + +DEFINE_GEN(gen_op_load_s16_T0_T1_0,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_s16_T0_T1_0 +{ + static const uint8 op_load_s16_T0_T1_0_code[] = { + 0x0f, 0xb7, 0x86, 0x00, 0x00, 0x00, 0x11, 0x66, 0xc1, 0xc0, 0x08, 0x0f, + 0xbf, 0xd8 + }; + copy_block(op_load_s16_T0_T1_0_code, 14); + inc_code_ptr(14); +} +#endif + +DEFINE_GEN(gen_op_store_16_T0_T1_0,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_16_T0_T1_0 +{ + static const uint8 op_store_16_T0_T1_0_code[] = { + 0x0f, 0xb7, 0xc3, 0x66, 0xc1, 0xc0, 0x08, 0x66, 0x89, 0x86, 0x00, 0x00, + 0x00, 0x11 + }; + copy_block(op_store_16_T0_T1_0_code, 14); + inc_code_ptr(14); +} +#endif + +DEFINE_GEN(gen_op_load_u16_T0_T1_im,void,(long param1)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_u16_T0_T1_im +{ + static const uint8 op_load_u16_T0_T1_im_code[] = { + 0x0f, 0xb7, 0x86, 0x00, 0x00, 0x00, 0x11, 0x66, 0xc1, 0xc0, 0x08, 0x0f, + 0xb7, 0xd8 + }; + copy_block(op_load_u16_T0_T1_im_code, 14); + *(uint32_t *)(code_ptr() + 3) = param1 + 285212672; + inc_code_ptr(14); +} +#endif + +DEFINE_GEN(gen_op_load_s16_T0_T1_im,void,(long param1)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_s16_T0_T1_im +{ + static const uint8 op_load_s16_T0_T1_im_code[] = { + 0x0f, 0xb7, 0x86, 0x00, 0x00, 0x00, 0x11, 0x66, 0xc1, 0xc0, 0x08, 0x0f, + 0xbf, 0xd8 + }; + copy_block(op_load_s16_T0_T1_im_code, 14); + *(uint32_t *)(code_ptr() + 3) = param1 + 285212672; + inc_code_ptr(14); +} +#endif + +DEFINE_GEN(gen_op_store_16_T0_T1_im,void,(long param1)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_16_T0_T1_im +{ + static const uint8 op_store_16_T0_T1_im_code[] = { + 0x8d, 0x96, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xb7, 0xc3, 0x66, 0xc1, 0xc0, + 0x08, 0x66, 0x89, 0x82, 0x00, 0x00, 0x00, 0x11 + }; + copy_block(op_store_16_T0_T1_im_code, 20); + *(uint32_t *)(code_ptr() + 2) = param1 + 0; + inc_code_ptr(20); +} +#endif + +DEFINE_GEN(gen_op_load_u16_T0_T1_T2,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_u16_T0_T1_T2 +{ + static const uint8 op_load_u16_T0_T1_T2_code[] = { + 0x0f, 0xb7, 0x84, 0x3e, 0x00, 0x00, 0x00, 0x11, 0x66, 0xc1, 0xc0, 0x08, + 0x0f, 0xb7, 0xd8 + }; + copy_block(op_load_u16_T0_T1_T2_code, 15); + inc_code_ptr(15); +} +#endif + +DEFINE_GEN(gen_op_load_s16_T0_T1_T2,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_s16_T0_T1_T2 +{ + static const uint8 op_load_s16_T0_T1_T2_code[] = { + 0x0f, 0xb7, 0x84, 0x3e, 0x00, 0x00, 0x00, 0x11, 0x66, 0xc1, 0xc0, 0x08, + 0x0f, 0xbf, 0xd8 + }; + copy_block(op_load_s16_T0_T1_T2_code, 15); + inc_code_ptr(15); +} +#endif + +DEFINE_GEN(gen_op_store_16_T0_T1_T2,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_16_T0_T1_T2 +{ + static const uint8 op_store_16_T0_T1_T2_code[] = { + 0x8d, 0x14, 0x3e, 0x0f, 0xb7, 0xc3, 0x66, 0xc1, 0xc0, 0x08, 0x66, 0x89, + 0x82, 0x00, 0x00, 0x00, 0x11 + }; + copy_block(op_store_16_T0_T1_T2_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_load_u8_T0_T1_0,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_u8_T0_T1_0 +{ + static const uint8 op_load_u8_T0_T1_0_code[] = { + 0x0f, 0xb6, 0x9e, 0x00, 0x00, 0x00, 0x11 + }; + copy_block(op_load_u8_T0_T1_0_code, 7); + inc_code_ptr(7); +} +#endif + +DEFINE_GEN(gen_op_load_s8_T0_T1_0,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_s8_T0_T1_0 +{ + static const uint8 op_load_s8_T0_T1_0_code[] = { + 0x0f, 0xbe, 0x9e, 0x00, 0x00, 0x00, 0x11 + }; + copy_block(op_load_s8_T0_T1_0_code, 7); + inc_code_ptr(7); +} +#endif + +DEFINE_GEN(gen_op_store_8_T0_T1_0,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_8_T0_T1_0 +{ + static const uint8 op_store_8_T0_T1_0_code[] = { + 0x88, 0x9e, 0x00, 0x00, 0x00, 0x11 + }; + copy_block(op_store_8_T0_T1_0_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_u8_T0_T1_im,void,(long param1)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_u8_T0_T1_im +{ + static const uint8 op_load_u8_T0_T1_im_code[] = { + 0x0f, 0xb6, 0x9e, 0x00, 0x00, 0x00, 0x11 + }; + copy_block(op_load_u8_T0_T1_im_code, 7); + *(uint32_t *)(code_ptr() + 3) = param1 + 285212672; + inc_code_ptr(7); +} +#endif + +DEFINE_GEN(gen_op_load_s8_T0_T1_im,void,(long param1)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_s8_T0_T1_im +{ + static const uint8 op_load_s8_T0_T1_im_code[] = { + 0x0f, 0xbe, 0x9e, 0x00, 0x00, 0x00, 0x11 + }; + copy_block(op_load_s8_T0_T1_im_code, 7); + *(uint32_t *)(code_ptr() + 3) = param1 + 285212672; + inc_code_ptr(7); +} +#endif + +DEFINE_GEN(gen_op_store_8_T0_T1_im,void,(long param1)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_8_T0_T1_im +{ + static const uint8 op_store_8_T0_T1_im_code[] = { + 0x88, 0x9e, 0x00, 0x00, 0x00, 0x11 + }; + copy_block(op_store_8_T0_T1_im_code, 6); + *(uint32_t *)(code_ptr() + 2) = param1 + 285212672; + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_u8_T0_T1_T2,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_u8_T0_T1_T2 +{ + static const uint8 op_load_u8_T0_T1_T2_code[] = { + 0x0f, 0xb6, 0x9c, 0x3e, 0x00, 0x00, 0x00, 0x11 + }; + copy_block(op_load_u8_T0_T1_T2_code, 8); + inc_code_ptr(8); +} +#endif + +DEFINE_GEN(gen_op_load_s8_T0_T1_T2,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_s8_T0_T1_T2 +{ + static const uint8 op_load_s8_T0_T1_T2_code[] = { + 0x0f, 0xbe, 0x9c, 0x3e, 0x00, 0x00, 0x00, 0x11 + }; + copy_block(op_load_s8_T0_T1_T2_code, 8); + inc_code_ptr(8); +} +#endif + +DEFINE_GEN(gen_op_store_8_T0_T1_T2,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_8_T0_T1_T2 +{ + static const uint8 op_store_8_T0_T1_T2_code[] = { + 0x88, 0x9c, 0x3e, 0x00, 0x00, 0x00, 0x11 + }; + copy_block(op_store_8_T0_T1_T2_code, 7); + inc_code_ptr(7); +} +#endif + +DEFINE_GEN(gen_op_execute,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_execute +{ + static const uint8 op_execute_code[] = { + 0x83, 0xec, 0x50, 0x89, 0x6c, 0x24, 0x4c, 0x8b, 0x6c, 0x24, 0x58, 0x89, + 0x5c, 0x24, 0x48, 0x89, 0x74, 0x24, 0x44, 0x89, 0x7c, 0x24, 0x40, 0xff, + 0x64, 0x24, 0x54, 0x90, 0x8d, 0x74, 0x26, 0x00, 0xff, 0x54, 0x24, 0x54, + 0x8b, 0x7c, 0x24, 0x40, 0x8b, 0x74, 0x24, 0x44, 0x8b, 0x5c, 0x24, 0x48, + 0x8b, 0x6c, 0x24, 0x4c, 0x83, 0xc4, 0x50, 0xc3, 0x90, 0x8d, 0xb4, 0x26, + 0x00, 0x00, 0x00, 0x00 + }; + copy_block(op_execute_code, 64); + inc_code_ptr(64); +} +#endif + +DEFINE_GEN(gen_op_jmp_slow,void,(long param1)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_jmp_slow +{ + static const uint8 op_jmp_slow_code[] = { + 0xb8, 0x00, 0x00, 0x00, 0x00, 0xff, 0xe0 + }; + copy_block(op_jmp_slow_code, 7); + *(uint32_t *)(code_ptr() + 1) = param1 + 0; + inc_code_ptr(7); +} +#endif + +DEFINE_GEN(gen_op_jmp_fast,void,(long param1)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_jmp_fast +{ + static const uint8 op_jmp_fast_code[] = { + 0xe9, 0x00, 0x00, 0x00, 0x00 + }; + copy_block(op_jmp_fast_code, 5); + *(uint32_t *)(code_ptr() + 1) = param1 - (long)(code_ptr() + 1) + 0 -4; + inc_code_ptr(5); +} +#endif + +DEFINE_GEN(gen_op_jmp_A0,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_jmp_A0 +{ + static const uint8 op_jmp_A0_code[] = { + 0xff, 0xe3 + }; + copy_block(op_jmp_A0_code, 2); + inc_code_ptr(2); +} +#endif + +DEFINE_GEN(gen_op_invoke,void,(long param1)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_invoke +{ + static const uint8 helper_op_invoke_code[] = { + 0xe8, 0x00, 0x00, 0x00, 0x00 + }; + copy_block(helper_op_invoke_code, 5); + *(uint32_t *)(code_ptr() + 1) = param1 - (long)(code_ptr() + 1) + 0 -4; + inc_code_ptr(5); +} +#endif + +DEFINE_GEN(gen_op_invoke_T0,void,(long param1)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_invoke_T0 +{ + static const uint8 helper_op_invoke_T0_code[] = { + 0x83, 0xec, 0x04, 0x89, 0x1c, 0x24, 0xe8, 0x00, 0x00, 0x00, 0x00, 0x58 + }; + copy_block(helper_op_invoke_T0_code, 12); + *(uint32_t *)(code_ptr() + 7) = param1 - (long)(code_ptr() + 7) + 0 -4; + inc_code_ptr(12); +} +#endif + +DEFINE_GEN(gen_op_invoke_T0_T1,void,(long param1)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_invoke_T0_T1 +{ + static const uint8 helper_op_invoke_T0_T1_code[] = { + 0x83, 0xec, 0x08, 0x89, 0x74, 0x24, 0x04, 0x89, 0x1c, 0x24, 0xe8, 0x00, + 0x00, 0x00, 0x00, 0x83, 0xc4, 0x08 + }; + copy_block(helper_op_invoke_T0_T1_code, 18); + *(uint32_t *)(code_ptr() + 11) = param1 - (long)(code_ptr() + 11) + 0 -4; + inc_code_ptr(18); +} +#endif + +DEFINE_GEN(gen_op_invoke_T0_T1_T2,void,(long param1)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_invoke_T0_T1_T2 +{ + static const uint8 helper_op_invoke_T0_T1_T2_code[] = { + 0x83, 0xec, 0x0c, 0x89, 0x7c, 0x24, 0x08, 0x89, 0x74, 0x24, 0x04, 0x89, + 0x1c, 0x24, 0xe8, 0x00, 0x00, 0x00, 0x00, 0x83, 0xc4, 0x0c + }; + copy_block(helper_op_invoke_T0_T1_T2_code, 22); + *(uint32_t *)(code_ptr() + 15) = param1 - (long)(code_ptr() + 15) + 0 -4; + inc_code_ptr(22); +} +#endif + +DEFINE_GEN(gen_op_invoke_T0_ret_T0,void,(long param1)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_invoke_T0_ret_T0 +{ + static const uint8 helper_op_invoke_T0_ret_T0_code[] = { + 0x83, 0xec, 0x04, 0x89, 0x1c, 0x24, 0xe8, 0x00, 0x00, 0x00, 0x00, 0x5a, + 0x89, 0xc3 + }; + copy_block(helper_op_invoke_T0_ret_T0_code, 14); + *(uint32_t *)(code_ptr() + 7) = param1 - (long)(code_ptr() + 7) + 0 -4; + inc_code_ptr(14); +} +#endif + +DEFINE_GEN(gen_op_invoke_im,void,(long param1, long param2)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_invoke_im +{ + static const uint8 helper_op_invoke_im_code[] = { + 0x83, 0xec, 0x04, 0xc7, 0x04, 0x24, 0x00, 0x00, 0x00, 0x00, 0xe8, 0x00, + 0x00, 0x00, 0x00, 0x59 + }; + copy_block(helper_op_invoke_im_code, 16); + *(uint32_t *)(code_ptr() + 6) = param2 + 0; + *(uint32_t *)(code_ptr() + 11) = param1 - (long)(code_ptr() + 11) + 0 -4; + inc_code_ptr(16); +} +#endif + +DEFINE_GEN(gen_op_invoke_CPU,void,(long param1)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_invoke_CPU +{ + static const uint8 helper_op_invoke_CPU_code[] = { + 0x83, 0xec, 0x04, 0x89, 0x2c, 0x24, 0xe8, 0x00, 0x00, 0x00, 0x00, 0x58 + }; + copy_block(helper_op_invoke_CPU_code, 12); + *(uint32_t *)(code_ptr() + 7) = param1 - (long)(code_ptr() + 7) + 0 -4; + inc_code_ptr(12); +} +#endif + +DEFINE_GEN(gen_op_invoke_CPU_T0,void,(long param1)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_invoke_CPU_T0 +{ + static const uint8 helper_op_invoke_CPU_T0_code[] = { + 0x83, 0xec, 0x08, 0x89, 0x5c, 0x24, 0x04, 0x89, 0x2c, 0x24, 0xe8, 0x00, + 0x00, 0x00, 0x00, 0x83, 0xc4, 0x08 + }; + copy_block(helper_op_invoke_CPU_T0_code, 18); + *(uint32_t *)(code_ptr() + 11) = param1 - (long)(code_ptr() + 11) + 0 -4; + inc_code_ptr(18); +} +#endif + +DEFINE_GEN(gen_op_invoke_CPU_im,void,(long param1, long param2)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_invoke_CPU_im +{ + static const uint8 helper_op_invoke_CPU_im_code[] = { + 0x83, 0xec, 0x08, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x89, 0x44, 0x24, 0x04, + 0x89, 0x2c, 0x24, 0xe8, 0x00, 0x00, 0x00, 0x00, 0x83, 0xc4, 0x08 + }; + copy_block(helper_op_invoke_CPU_im_code, 23); + *(uint32_t *)(code_ptr() + 4) = param2 + 0; + *(uint32_t *)(code_ptr() + 16) = param1 - (long)(code_ptr() + 16) + 0 -4; + inc_code_ptr(23); +} +#endif + +DEFINE_GEN(gen_op_invoke_CPU_im_im,void,(long param1, long param2, long param3)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_invoke_CPU_im_im +{ + static const uint8 helper_op_invoke_CPU_im_im_code[] = { + 0x83, 0xec, 0x0c, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x89, 0x44, 0x24, 0x08, + 0xb8, 0x00, 0x00, 0x00, 0x00, 0x89, 0x44, 0x24, 0x04, 0x89, 0x2c, 0x24, + 0xe8, 0x00, 0x00, 0x00, 0x00, 0x83, 0xc4, 0x0c + }; + copy_block(helper_op_invoke_CPU_im_im_code, 32); + *(uint32_t *)(code_ptr() + 4) = param3 + 0; + *(uint32_t *)(code_ptr() + 13) = param2 + 0; + *(uint32_t *)(code_ptr() + 25) = param1 - (long)(code_ptr() + 25) + 0 -4; + inc_code_ptr(32); +} +#endif + +DEFINE_GEN(gen_op_invoke_CPU_A0_ret_A0,void,(long param1)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_invoke_CPU_A0_ret_A0 +{ + static const uint8 helper_op_invoke_CPU_A0_ret_A0_code[] = { + 0x83, 0xec, 0x08, 0x89, 0x5c, 0x24, 0x04, 0x89, 0x2c, 0x24, 0xe8, 0x00, + 0x00, 0x00, 0x00, 0x89, 0xc3, 0x83, 0xc4, 0x08 + }; + copy_block(helper_op_invoke_CPU_A0_ret_A0_code, 20); + *(uint32_t *)(code_ptr() + 11) = param1 - (long)(code_ptr() + 11) + 0 -4; + inc_code_ptr(20); +} +#endif + +DEFINE_GEN(gen_op_invoke_direct,void,(long param1)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_invoke_direct +{ + static const uint8 helper_op_invoke_direct_code[] = { + 0xe8, 0x00, 0x00, 0x00, 0x00 + }; + copy_block(helper_op_invoke_direct_code, 5); + *(uint32_t *)(code_ptr() + 1) = param1 - (long)(code_ptr() + 1) + 0 -4; + inc_code_ptr(5); +} +#endif + +DEFINE_GEN(gen_op_invoke_direct_T0,void,(long param1)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_invoke_direct_T0 +{ + static const uint8 helper_op_invoke_direct_T0_code[] = { + 0x83, 0xec, 0x04, 0x89, 0x1c, 0x24, 0xe8, 0x00, 0x00, 0x00, 0x00, 0x58 + }; + copy_block(helper_op_invoke_direct_T0_code, 12); + *(uint32_t *)(code_ptr() + 7) = param1 - (long)(code_ptr() + 7) + 0 -4; + inc_code_ptr(12); +} +#endif + +DEFINE_GEN(gen_op_invoke_direct_T0_T1,void,(long param1)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_invoke_direct_T0_T1 +{ + static const uint8 helper_op_invoke_direct_T0_T1_code[] = { + 0x83, 0xec, 0x08, 0x89, 0x74, 0x24, 0x04, 0x89, 0x1c, 0x24, 0xe8, 0x00, + 0x00, 0x00, 0x00, 0x83, 0xc4, 0x08 + }; + copy_block(helper_op_invoke_direct_T0_T1_code, 18); + *(uint32_t *)(code_ptr() + 11) = param1 - (long)(code_ptr() + 11) + 0 -4; + inc_code_ptr(18); +} +#endif + +DEFINE_GEN(gen_op_invoke_direct_T0_T1_T2,void,(long param1)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_invoke_direct_T0_T1_T2 +{ + static const uint8 helper_op_invoke_direct_T0_T1_T2_code[] = { + 0x83, 0xec, 0x0c, 0x89, 0x7c, 0x24, 0x08, 0x89, 0x74, 0x24, 0x04, 0x89, + 0x1c, 0x24, 0xe8, 0x00, 0x00, 0x00, 0x00, 0x83, 0xc4, 0x0c + }; + copy_block(helper_op_invoke_direct_T0_T1_T2_code, 22); + *(uint32_t *)(code_ptr() + 15) = param1 - (long)(code_ptr() + 15) + 0 -4; + inc_code_ptr(22); +} +#endif + +DEFINE_GEN(gen_op_invoke_direct_T0_ret_T0,void,(long param1)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_invoke_direct_T0_ret_T0 +{ + static const uint8 helper_op_invoke_direct_T0_ret_T0_code[] = { + 0x83, 0xec, 0x04, 0x89, 0x1c, 0x24, 0xe8, 0x00, 0x00, 0x00, 0x00, 0x89, + 0xc3, 0x58 + }; + copy_block(helper_op_invoke_direct_T0_ret_T0_code, 14); + *(uint32_t *)(code_ptr() + 7) = param1 - (long)(code_ptr() + 7) + 0 -4; + inc_code_ptr(14); +} +#endif + +DEFINE_GEN(gen_op_invoke_direct_im,void,(long param1, long param2)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_invoke_direct_im +{ + static const uint8 helper_op_invoke_direct_im_code[] = { + 0x83, 0xec, 0x04, 0xc7, 0x04, 0x24, 0x00, 0x00, 0x00, 0x00, 0xe8, 0x00, + 0x00, 0x00, 0x00, 0x5a + }; + copy_block(helper_op_invoke_direct_im_code, 16); + *(uint32_t *)(code_ptr() + 6) = param2 + 0; + *(uint32_t *)(code_ptr() + 11) = param1 - (long)(code_ptr() + 11) + 0 -4; + inc_code_ptr(16); +} +#endif + +DEFINE_GEN(gen_op_invoke_direct_CPU,void,(long param1)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_invoke_direct_CPU +{ + static const uint8 helper_op_invoke_direct_CPU_code[] = { + 0x83, 0xec, 0x04, 0x89, 0x2c, 0x24, 0xe8, 0x00, 0x00, 0x00, 0x00, 0x59 + }; + copy_block(helper_op_invoke_direct_CPU_code, 12); + *(uint32_t *)(code_ptr() + 7) = param1 - (long)(code_ptr() + 7) + 0 -4; + inc_code_ptr(12); +} +#endif + +DEFINE_GEN(gen_op_invoke_direct_CPU_T0,void,(long param1)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_invoke_direct_CPU_T0 +{ + static const uint8 helper_op_invoke_direct_CPU_T0_code[] = { + 0x83, 0xec, 0x08, 0x89, 0x5c, 0x24, 0x04, 0x89, 0x2c, 0x24, 0xe8, 0x00, + 0x00, 0x00, 0x00, 0x83, 0xc4, 0x08 + }; + copy_block(helper_op_invoke_direct_CPU_T0_code, 18); + *(uint32_t *)(code_ptr() + 11) = param1 - (long)(code_ptr() + 11) + 0 -4; + inc_code_ptr(18); +} +#endif + +DEFINE_GEN(gen_op_invoke_direct_CPU_im,void,(long param1, long param2)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_invoke_direct_CPU_im +{ + static const uint8 helper_op_invoke_direct_CPU_im_code[] = { + 0x83, 0xec, 0x08, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x89, 0x44, 0x24, 0x04, + 0x89, 0x2c, 0x24, 0xe8, 0x00, 0x00, 0x00, 0x00, 0x83, 0xc4, 0x08 + }; + copy_block(helper_op_invoke_direct_CPU_im_code, 23); + *(uint32_t *)(code_ptr() + 4) = param2 + 0; + *(uint32_t *)(code_ptr() + 16) = param1 - (long)(code_ptr() + 16) + 0 -4; + inc_code_ptr(23); +} +#endif + +DEFINE_GEN(gen_op_invoke_direct_CPU_im_im,void,(long param1, long param2, long param3)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_invoke_direct_CPU_im_im +{ + static const uint8 helper_op_invoke_direct_CPU_im_im_code[] = { + 0x83, 0xec, 0x0c, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x89, 0x44, 0x24, 0x08, + 0xb8, 0x00, 0x00, 0x00, 0x00, 0x89, 0x44, 0x24, 0x04, 0x89, 0x2c, 0x24, + 0xe8, 0x00, 0x00, 0x00, 0x00, 0x83, 0xc4, 0x0c + }; + copy_block(helper_op_invoke_direct_CPU_im_im_code, 32); + *(uint32_t *)(code_ptr() + 4) = param3 + 0; + *(uint32_t *)(code_ptr() + 13) = param2 + 0; + *(uint32_t *)(code_ptr() + 25) = param1 - (long)(code_ptr() + 25) + 0 -4; + inc_code_ptr(32); +} +#endif + +DEFINE_GEN(gen_op_invoke_direct_CPU_A0_ret_A0,void,(long param1)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_invoke_direct_CPU_A0_ret_A0 +{ + static const uint8 helper_op_invoke_direct_CPU_A0_ret_A0_code[] = { + 0x83, 0xec, 0x08, 0x89, 0x5c, 0x24, 0x04, 0x89, 0x2c, 0x24, 0xe8, 0x00, + 0x00, 0x00, 0x00, 0x89, 0xc3, 0x83, 0xc4, 0x08 + }; + copy_block(helper_op_invoke_direct_CPU_A0_ret_A0_code, 20); + *(uint32_t *)(code_ptr() + 11) = param1 - (long)(code_ptr() + 11) + 0 -4; + inc_code_ptr(20); +} +#endif + +DEFINE_CST(op_exec_return_offset,0x24L) + +#undef DEFINE_CST +#undef DEFINE_GEN diff --git a/SheepShaver/src/Windows/cygwin_precompiled_dyngen/ppc-dyngen-ops.hpp b/SheepShaver/src/Windows/cygwin_precompiled_dyngen/ppc-dyngen-ops.hpp new file mode 100644 index 00000000..9f2e1f3f --- /dev/null +++ b/SheepShaver/src/Windows/cygwin_precompiled_dyngen/ppc-dyngen-ops.hpp @@ -0,0 +1,11173 @@ +#ifndef DEFINE_CST +#define DEFINE_CST(NAME, VALUE) +#endif +DEFINE_GEN(gen_op_load_T0_GPR0,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T0_GPR0 +{ + static const uint8 op_load_T0_GPR0_code[] = { + 0x8b, 0x5d, 0x10 + }; + copy_block(op_load_T0_GPR0_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_store_T0_GPR0,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T0_GPR0 +{ + static const uint8 op_store_T0_GPR0_code[] = { + 0x89, 0x5d, 0x10 + }; + copy_block(op_store_T0_GPR0_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_load_T1_GPR0,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T1_GPR0 +{ + static const uint8 op_load_T1_GPR0_code[] = { + 0x8b, 0x75, 0x10 + }; + copy_block(op_load_T1_GPR0_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_store_T1_GPR0,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T1_GPR0 +{ + static const uint8 op_store_T1_GPR0_code[] = { + 0x89, 0x75, 0x10 + }; + copy_block(op_store_T1_GPR0_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_load_T2_GPR0,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T2_GPR0 +{ + static const uint8 op_load_T2_GPR0_code[] = { + 0x8b, 0x7d, 0x10 + }; + copy_block(op_load_T2_GPR0_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_store_T2_GPR0,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T2_GPR0 +{ + static const uint8 op_store_T2_GPR0_code[] = { + 0x89, 0x7d, 0x10 + }; + copy_block(op_store_T2_GPR0_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_load_T0_GPR1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T0_GPR1 +{ + static const uint8 op_load_T0_GPR1_code[] = { + 0x8b, 0x5d, 0x14 + }; + copy_block(op_load_T0_GPR1_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_store_T0_GPR1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T0_GPR1 +{ + static const uint8 op_store_T0_GPR1_code[] = { + 0x89, 0x5d, 0x14 + }; + copy_block(op_store_T0_GPR1_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_load_T1_GPR1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T1_GPR1 +{ + static const uint8 op_load_T1_GPR1_code[] = { + 0x8b, 0x75, 0x14 + }; + copy_block(op_load_T1_GPR1_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_store_T1_GPR1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T1_GPR1 +{ + static const uint8 op_store_T1_GPR1_code[] = { + 0x89, 0x75, 0x14 + }; + copy_block(op_store_T1_GPR1_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_load_T2_GPR1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T2_GPR1 +{ + static const uint8 op_load_T2_GPR1_code[] = { + 0x8b, 0x7d, 0x14 + }; + copy_block(op_load_T2_GPR1_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_store_T2_GPR1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T2_GPR1 +{ + static const uint8 op_store_T2_GPR1_code[] = { + 0x89, 0x7d, 0x14 + }; + copy_block(op_store_T2_GPR1_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_load_T0_GPR2,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T0_GPR2 +{ + static const uint8 op_load_T0_GPR2_code[] = { + 0x8b, 0x5d, 0x18 + }; + copy_block(op_load_T0_GPR2_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_store_T0_GPR2,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T0_GPR2 +{ + static const uint8 op_store_T0_GPR2_code[] = { + 0x89, 0x5d, 0x18 + }; + copy_block(op_store_T0_GPR2_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_load_T1_GPR2,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T1_GPR2 +{ + static const uint8 op_load_T1_GPR2_code[] = { + 0x8b, 0x75, 0x18 + }; + copy_block(op_load_T1_GPR2_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_store_T1_GPR2,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T1_GPR2 +{ + static const uint8 op_store_T1_GPR2_code[] = { + 0x89, 0x75, 0x18 + }; + copy_block(op_store_T1_GPR2_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_load_T2_GPR2,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T2_GPR2 +{ + static const uint8 op_load_T2_GPR2_code[] = { + 0x8b, 0x7d, 0x18 + }; + copy_block(op_load_T2_GPR2_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_store_T2_GPR2,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T2_GPR2 +{ + static const uint8 op_store_T2_GPR2_code[] = { + 0x89, 0x7d, 0x18 + }; + copy_block(op_store_T2_GPR2_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_load_T0_GPR3,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T0_GPR3 +{ + static const uint8 op_load_T0_GPR3_code[] = { + 0x8b, 0x5d, 0x1c + }; + copy_block(op_load_T0_GPR3_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_store_T0_GPR3,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T0_GPR3 +{ + static const uint8 op_store_T0_GPR3_code[] = { + 0x89, 0x5d, 0x1c + }; + copy_block(op_store_T0_GPR3_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_load_T1_GPR3,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T1_GPR3 +{ + static const uint8 op_load_T1_GPR3_code[] = { + 0x8b, 0x75, 0x1c + }; + copy_block(op_load_T1_GPR3_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_store_T1_GPR3,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T1_GPR3 +{ + static const uint8 op_store_T1_GPR3_code[] = { + 0x89, 0x75, 0x1c + }; + copy_block(op_store_T1_GPR3_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_load_T2_GPR3,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T2_GPR3 +{ + static const uint8 op_load_T2_GPR3_code[] = { + 0x8b, 0x7d, 0x1c + }; + copy_block(op_load_T2_GPR3_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_store_T2_GPR3,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T2_GPR3 +{ + static const uint8 op_store_T2_GPR3_code[] = { + 0x89, 0x7d, 0x1c + }; + copy_block(op_store_T2_GPR3_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_load_T0_GPR4,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T0_GPR4 +{ + static const uint8 op_load_T0_GPR4_code[] = { + 0x8b, 0x5d, 0x20 + }; + copy_block(op_load_T0_GPR4_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_store_T0_GPR4,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T0_GPR4 +{ + static const uint8 op_store_T0_GPR4_code[] = { + 0x89, 0x5d, 0x20 + }; + copy_block(op_store_T0_GPR4_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_load_T1_GPR4,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T1_GPR4 +{ + static const uint8 op_load_T1_GPR4_code[] = { + 0x8b, 0x75, 0x20 + }; + copy_block(op_load_T1_GPR4_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_store_T1_GPR4,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T1_GPR4 +{ + static const uint8 op_store_T1_GPR4_code[] = { + 0x89, 0x75, 0x20 + }; + copy_block(op_store_T1_GPR4_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_load_T2_GPR4,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T2_GPR4 +{ + static const uint8 op_load_T2_GPR4_code[] = { + 0x8b, 0x7d, 0x20 + }; + copy_block(op_load_T2_GPR4_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_store_T2_GPR4,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T2_GPR4 +{ + static const uint8 op_store_T2_GPR4_code[] = { + 0x89, 0x7d, 0x20 + }; + copy_block(op_store_T2_GPR4_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_load_T0_GPR5,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T0_GPR5 +{ + static const uint8 op_load_T0_GPR5_code[] = { + 0x8b, 0x5d, 0x24 + }; + copy_block(op_load_T0_GPR5_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_store_T0_GPR5,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T0_GPR5 +{ + static const uint8 op_store_T0_GPR5_code[] = { + 0x89, 0x5d, 0x24 + }; + copy_block(op_store_T0_GPR5_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_load_T1_GPR5,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T1_GPR5 +{ + static const uint8 op_load_T1_GPR5_code[] = { + 0x8b, 0x75, 0x24 + }; + copy_block(op_load_T1_GPR5_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_store_T1_GPR5,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T1_GPR5 +{ + static const uint8 op_store_T1_GPR5_code[] = { + 0x89, 0x75, 0x24 + }; + copy_block(op_store_T1_GPR5_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_load_T2_GPR5,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T2_GPR5 +{ + static const uint8 op_load_T2_GPR5_code[] = { + 0x8b, 0x7d, 0x24 + }; + copy_block(op_load_T2_GPR5_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_store_T2_GPR5,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T2_GPR5 +{ + static const uint8 op_store_T2_GPR5_code[] = { + 0x89, 0x7d, 0x24 + }; + copy_block(op_store_T2_GPR5_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_load_T0_GPR6,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T0_GPR6 +{ + static const uint8 op_load_T0_GPR6_code[] = { + 0x8b, 0x5d, 0x28 + }; + copy_block(op_load_T0_GPR6_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_store_T0_GPR6,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T0_GPR6 +{ + static const uint8 op_store_T0_GPR6_code[] = { + 0x89, 0x5d, 0x28 + }; + copy_block(op_store_T0_GPR6_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_load_T1_GPR6,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T1_GPR6 +{ + static const uint8 op_load_T1_GPR6_code[] = { + 0x8b, 0x75, 0x28 + }; + copy_block(op_load_T1_GPR6_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_store_T1_GPR6,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T1_GPR6 +{ + static const uint8 op_store_T1_GPR6_code[] = { + 0x89, 0x75, 0x28 + }; + copy_block(op_store_T1_GPR6_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_load_T2_GPR6,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T2_GPR6 +{ + static const uint8 op_load_T2_GPR6_code[] = { + 0x8b, 0x7d, 0x28 + }; + copy_block(op_load_T2_GPR6_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_store_T2_GPR6,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T2_GPR6 +{ + static const uint8 op_store_T2_GPR6_code[] = { + 0x89, 0x7d, 0x28 + }; + copy_block(op_store_T2_GPR6_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_load_T0_GPR7,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T0_GPR7 +{ + static const uint8 op_load_T0_GPR7_code[] = { + 0x8b, 0x5d, 0x2c + }; + copy_block(op_load_T0_GPR7_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_store_T0_GPR7,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T0_GPR7 +{ + static const uint8 op_store_T0_GPR7_code[] = { + 0x89, 0x5d, 0x2c + }; + copy_block(op_store_T0_GPR7_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_load_T1_GPR7,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T1_GPR7 +{ + static const uint8 op_load_T1_GPR7_code[] = { + 0x8b, 0x75, 0x2c + }; + copy_block(op_load_T1_GPR7_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_store_T1_GPR7,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T1_GPR7 +{ + static const uint8 op_store_T1_GPR7_code[] = { + 0x89, 0x75, 0x2c + }; + copy_block(op_store_T1_GPR7_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_load_T2_GPR7,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T2_GPR7 +{ + static const uint8 op_load_T2_GPR7_code[] = { + 0x8b, 0x7d, 0x2c + }; + copy_block(op_load_T2_GPR7_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_store_T2_GPR7,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T2_GPR7 +{ + static const uint8 op_store_T2_GPR7_code[] = { + 0x89, 0x7d, 0x2c + }; + copy_block(op_store_T2_GPR7_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_load_T0_GPR8,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T0_GPR8 +{ + static const uint8 op_load_T0_GPR8_code[] = { + 0x8b, 0x5d, 0x30 + }; + copy_block(op_load_T0_GPR8_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_store_T0_GPR8,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T0_GPR8 +{ + static const uint8 op_store_T0_GPR8_code[] = { + 0x89, 0x5d, 0x30 + }; + copy_block(op_store_T0_GPR8_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_load_T1_GPR8,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T1_GPR8 +{ + static const uint8 op_load_T1_GPR8_code[] = { + 0x8b, 0x75, 0x30 + }; + copy_block(op_load_T1_GPR8_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_store_T1_GPR8,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T1_GPR8 +{ + static const uint8 op_store_T1_GPR8_code[] = { + 0x89, 0x75, 0x30 + }; + copy_block(op_store_T1_GPR8_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_load_T2_GPR8,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T2_GPR8 +{ + static const uint8 op_load_T2_GPR8_code[] = { + 0x8b, 0x7d, 0x30 + }; + copy_block(op_load_T2_GPR8_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_store_T2_GPR8,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T2_GPR8 +{ + static const uint8 op_store_T2_GPR8_code[] = { + 0x89, 0x7d, 0x30 + }; + copy_block(op_store_T2_GPR8_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_load_T0_GPR9,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T0_GPR9 +{ + static const uint8 op_load_T0_GPR9_code[] = { + 0x8b, 0x5d, 0x34 + }; + copy_block(op_load_T0_GPR9_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_store_T0_GPR9,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T0_GPR9 +{ + static const uint8 op_store_T0_GPR9_code[] = { + 0x89, 0x5d, 0x34 + }; + copy_block(op_store_T0_GPR9_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_load_T1_GPR9,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T1_GPR9 +{ + static const uint8 op_load_T1_GPR9_code[] = { + 0x8b, 0x75, 0x34 + }; + copy_block(op_load_T1_GPR9_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_store_T1_GPR9,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T1_GPR9 +{ + static const uint8 op_store_T1_GPR9_code[] = { + 0x89, 0x75, 0x34 + }; + copy_block(op_store_T1_GPR9_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_load_T2_GPR9,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T2_GPR9 +{ + static const uint8 op_load_T2_GPR9_code[] = { + 0x8b, 0x7d, 0x34 + }; + copy_block(op_load_T2_GPR9_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_store_T2_GPR9,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T2_GPR9 +{ + static const uint8 op_store_T2_GPR9_code[] = { + 0x89, 0x7d, 0x34 + }; + copy_block(op_store_T2_GPR9_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_load_T0_GPR10,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T0_GPR10 +{ + static const uint8 op_load_T0_GPR10_code[] = { + 0x8b, 0x5d, 0x38 + }; + copy_block(op_load_T0_GPR10_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_store_T0_GPR10,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T0_GPR10 +{ + static const uint8 op_store_T0_GPR10_code[] = { + 0x89, 0x5d, 0x38 + }; + copy_block(op_store_T0_GPR10_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_load_T1_GPR10,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T1_GPR10 +{ + static const uint8 op_load_T1_GPR10_code[] = { + 0x8b, 0x75, 0x38 + }; + copy_block(op_load_T1_GPR10_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_store_T1_GPR10,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T1_GPR10 +{ + static const uint8 op_store_T1_GPR10_code[] = { + 0x89, 0x75, 0x38 + }; + copy_block(op_store_T1_GPR10_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_load_T2_GPR10,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T2_GPR10 +{ + static const uint8 op_load_T2_GPR10_code[] = { + 0x8b, 0x7d, 0x38 + }; + copy_block(op_load_T2_GPR10_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_store_T2_GPR10,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T2_GPR10 +{ + static const uint8 op_store_T2_GPR10_code[] = { + 0x89, 0x7d, 0x38 + }; + copy_block(op_store_T2_GPR10_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_load_T0_GPR11,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T0_GPR11 +{ + static const uint8 op_load_T0_GPR11_code[] = { + 0x8b, 0x5d, 0x3c + }; + copy_block(op_load_T0_GPR11_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_store_T0_GPR11,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T0_GPR11 +{ + static const uint8 op_store_T0_GPR11_code[] = { + 0x89, 0x5d, 0x3c + }; + copy_block(op_store_T0_GPR11_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_load_T1_GPR11,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T1_GPR11 +{ + static const uint8 op_load_T1_GPR11_code[] = { + 0x8b, 0x75, 0x3c + }; + copy_block(op_load_T1_GPR11_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_store_T1_GPR11,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T1_GPR11 +{ + static const uint8 op_store_T1_GPR11_code[] = { + 0x89, 0x75, 0x3c + }; + copy_block(op_store_T1_GPR11_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_load_T2_GPR11,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T2_GPR11 +{ + static const uint8 op_load_T2_GPR11_code[] = { + 0x8b, 0x7d, 0x3c + }; + copy_block(op_load_T2_GPR11_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_store_T2_GPR11,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T2_GPR11 +{ + static const uint8 op_store_T2_GPR11_code[] = { + 0x89, 0x7d, 0x3c + }; + copy_block(op_store_T2_GPR11_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_load_T0_GPR12,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T0_GPR12 +{ + static const uint8 op_load_T0_GPR12_code[] = { + 0x8b, 0x5d, 0x40 + }; + copy_block(op_load_T0_GPR12_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_store_T0_GPR12,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T0_GPR12 +{ + static const uint8 op_store_T0_GPR12_code[] = { + 0x89, 0x5d, 0x40 + }; + copy_block(op_store_T0_GPR12_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_load_T1_GPR12,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T1_GPR12 +{ + static const uint8 op_load_T1_GPR12_code[] = { + 0x8b, 0x75, 0x40 + }; + copy_block(op_load_T1_GPR12_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_store_T1_GPR12,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T1_GPR12 +{ + static const uint8 op_store_T1_GPR12_code[] = { + 0x89, 0x75, 0x40 + }; + copy_block(op_store_T1_GPR12_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_load_T2_GPR12,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T2_GPR12 +{ + static const uint8 op_load_T2_GPR12_code[] = { + 0x8b, 0x7d, 0x40 + }; + copy_block(op_load_T2_GPR12_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_store_T2_GPR12,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T2_GPR12 +{ + static const uint8 op_store_T2_GPR12_code[] = { + 0x89, 0x7d, 0x40 + }; + copy_block(op_store_T2_GPR12_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_load_T0_GPR13,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T0_GPR13 +{ + static const uint8 op_load_T0_GPR13_code[] = { + 0x8b, 0x5d, 0x44 + }; + copy_block(op_load_T0_GPR13_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_store_T0_GPR13,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T0_GPR13 +{ + static const uint8 op_store_T0_GPR13_code[] = { + 0x89, 0x5d, 0x44 + }; + copy_block(op_store_T0_GPR13_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_load_T1_GPR13,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T1_GPR13 +{ + static const uint8 op_load_T1_GPR13_code[] = { + 0x8b, 0x75, 0x44 + }; + copy_block(op_load_T1_GPR13_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_store_T1_GPR13,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T1_GPR13 +{ + static const uint8 op_store_T1_GPR13_code[] = { + 0x89, 0x75, 0x44 + }; + copy_block(op_store_T1_GPR13_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_load_T2_GPR13,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T2_GPR13 +{ + static const uint8 op_load_T2_GPR13_code[] = { + 0x8b, 0x7d, 0x44 + }; + copy_block(op_load_T2_GPR13_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_store_T2_GPR13,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T2_GPR13 +{ + static const uint8 op_store_T2_GPR13_code[] = { + 0x89, 0x7d, 0x44 + }; + copy_block(op_store_T2_GPR13_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_load_T0_GPR14,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T0_GPR14 +{ + static const uint8 op_load_T0_GPR14_code[] = { + 0x8b, 0x5d, 0x48 + }; + copy_block(op_load_T0_GPR14_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_store_T0_GPR14,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T0_GPR14 +{ + static const uint8 op_store_T0_GPR14_code[] = { + 0x89, 0x5d, 0x48 + }; + copy_block(op_store_T0_GPR14_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_load_T1_GPR14,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T1_GPR14 +{ + static const uint8 op_load_T1_GPR14_code[] = { + 0x8b, 0x75, 0x48 + }; + copy_block(op_load_T1_GPR14_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_store_T1_GPR14,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T1_GPR14 +{ + static const uint8 op_store_T1_GPR14_code[] = { + 0x89, 0x75, 0x48 + }; + copy_block(op_store_T1_GPR14_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_load_T2_GPR14,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T2_GPR14 +{ + static const uint8 op_load_T2_GPR14_code[] = { + 0x8b, 0x7d, 0x48 + }; + copy_block(op_load_T2_GPR14_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_store_T2_GPR14,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T2_GPR14 +{ + static const uint8 op_store_T2_GPR14_code[] = { + 0x89, 0x7d, 0x48 + }; + copy_block(op_store_T2_GPR14_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_load_T0_GPR15,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T0_GPR15 +{ + static const uint8 op_load_T0_GPR15_code[] = { + 0x8b, 0x5d, 0x4c + }; + copy_block(op_load_T0_GPR15_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_store_T0_GPR15,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T0_GPR15 +{ + static const uint8 op_store_T0_GPR15_code[] = { + 0x89, 0x5d, 0x4c + }; + copy_block(op_store_T0_GPR15_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_load_T1_GPR15,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T1_GPR15 +{ + static const uint8 op_load_T1_GPR15_code[] = { + 0x8b, 0x75, 0x4c + }; + copy_block(op_load_T1_GPR15_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_store_T1_GPR15,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T1_GPR15 +{ + static const uint8 op_store_T1_GPR15_code[] = { + 0x89, 0x75, 0x4c + }; + copy_block(op_store_T1_GPR15_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_load_T2_GPR15,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T2_GPR15 +{ + static const uint8 op_load_T2_GPR15_code[] = { + 0x8b, 0x7d, 0x4c + }; + copy_block(op_load_T2_GPR15_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_store_T2_GPR15,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T2_GPR15 +{ + static const uint8 op_store_T2_GPR15_code[] = { + 0x89, 0x7d, 0x4c + }; + copy_block(op_store_T2_GPR15_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_load_T0_GPR16,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T0_GPR16 +{ + static const uint8 op_load_T0_GPR16_code[] = { + 0x8b, 0x5d, 0x50 + }; + copy_block(op_load_T0_GPR16_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_store_T0_GPR16,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T0_GPR16 +{ + static const uint8 op_store_T0_GPR16_code[] = { + 0x89, 0x5d, 0x50 + }; + copy_block(op_store_T0_GPR16_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_load_T1_GPR16,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T1_GPR16 +{ + static const uint8 op_load_T1_GPR16_code[] = { + 0x8b, 0x75, 0x50 + }; + copy_block(op_load_T1_GPR16_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_store_T1_GPR16,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T1_GPR16 +{ + static const uint8 op_store_T1_GPR16_code[] = { + 0x89, 0x75, 0x50 + }; + copy_block(op_store_T1_GPR16_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_load_T2_GPR16,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T2_GPR16 +{ + static const uint8 op_load_T2_GPR16_code[] = { + 0x8b, 0x7d, 0x50 + }; + copy_block(op_load_T2_GPR16_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_store_T2_GPR16,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T2_GPR16 +{ + static const uint8 op_store_T2_GPR16_code[] = { + 0x89, 0x7d, 0x50 + }; + copy_block(op_store_T2_GPR16_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_load_T0_GPR17,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T0_GPR17 +{ + static const uint8 op_load_T0_GPR17_code[] = { + 0x8b, 0x5d, 0x54 + }; + copy_block(op_load_T0_GPR17_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_store_T0_GPR17,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T0_GPR17 +{ + static const uint8 op_store_T0_GPR17_code[] = { + 0x89, 0x5d, 0x54 + }; + copy_block(op_store_T0_GPR17_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_load_T1_GPR17,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T1_GPR17 +{ + static const uint8 op_load_T1_GPR17_code[] = { + 0x8b, 0x75, 0x54 + }; + copy_block(op_load_T1_GPR17_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_store_T1_GPR17,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T1_GPR17 +{ + static const uint8 op_store_T1_GPR17_code[] = { + 0x89, 0x75, 0x54 + }; + copy_block(op_store_T1_GPR17_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_load_T2_GPR17,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T2_GPR17 +{ + static const uint8 op_load_T2_GPR17_code[] = { + 0x8b, 0x7d, 0x54 + }; + copy_block(op_load_T2_GPR17_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_store_T2_GPR17,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T2_GPR17 +{ + static const uint8 op_store_T2_GPR17_code[] = { + 0x89, 0x7d, 0x54 + }; + copy_block(op_store_T2_GPR17_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_load_T0_GPR18,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T0_GPR18 +{ + static const uint8 op_load_T0_GPR18_code[] = { + 0x8b, 0x5d, 0x58 + }; + copy_block(op_load_T0_GPR18_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_store_T0_GPR18,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T0_GPR18 +{ + static const uint8 op_store_T0_GPR18_code[] = { + 0x89, 0x5d, 0x58 + }; + copy_block(op_store_T0_GPR18_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_load_T1_GPR18,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T1_GPR18 +{ + static const uint8 op_load_T1_GPR18_code[] = { + 0x8b, 0x75, 0x58 + }; + copy_block(op_load_T1_GPR18_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_store_T1_GPR18,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T1_GPR18 +{ + static const uint8 op_store_T1_GPR18_code[] = { + 0x89, 0x75, 0x58 + }; + copy_block(op_store_T1_GPR18_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_load_T2_GPR18,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T2_GPR18 +{ + static const uint8 op_load_T2_GPR18_code[] = { + 0x8b, 0x7d, 0x58 + }; + copy_block(op_load_T2_GPR18_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_store_T2_GPR18,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T2_GPR18 +{ + static const uint8 op_store_T2_GPR18_code[] = { + 0x89, 0x7d, 0x58 + }; + copy_block(op_store_T2_GPR18_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_load_T0_GPR19,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T0_GPR19 +{ + static const uint8 op_load_T0_GPR19_code[] = { + 0x8b, 0x5d, 0x5c + }; + copy_block(op_load_T0_GPR19_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_store_T0_GPR19,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T0_GPR19 +{ + static const uint8 op_store_T0_GPR19_code[] = { + 0x89, 0x5d, 0x5c + }; + copy_block(op_store_T0_GPR19_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_load_T1_GPR19,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T1_GPR19 +{ + static const uint8 op_load_T1_GPR19_code[] = { + 0x8b, 0x75, 0x5c + }; + copy_block(op_load_T1_GPR19_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_store_T1_GPR19,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T1_GPR19 +{ + static const uint8 op_store_T1_GPR19_code[] = { + 0x89, 0x75, 0x5c + }; + copy_block(op_store_T1_GPR19_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_load_T2_GPR19,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T2_GPR19 +{ + static const uint8 op_load_T2_GPR19_code[] = { + 0x8b, 0x7d, 0x5c + }; + copy_block(op_load_T2_GPR19_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_store_T2_GPR19,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T2_GPR19 +{ + static const uint8 op_store_T2_GPR19_code[] = { + 0x89, 0x7d, 0x5c + }; + copy_block(op_store_T2_GPR19_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_load_T0_GPR20,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T0_GPR20 +{ + static const uint8 op_load_T0_GPR20_code[] = { + 0x8b, 0x5d, 0x60 + }; + copy_block(op_load_T0_GPR20_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_store_T0_GPR20,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T0_GPR20 +{ + static const uint8 op_store_T0_GPR20_code[] = { + 0x89, 0x5d, 0x60 + }; + copy_block(op_store_T0_GPR20_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_load_T1_GPR20,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T1_GPR20 +{ + static const uint8 op_load_T1_GPR20_code[] = { + 0x8b, 0x75, 0x60 + }; + copy_block(op_load_T1_GPR20_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_store_T1_GPR20,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T1_GPR20 +{ + static const uint8 op_store_T1_GPR20_code[] = { + 0x89, 0x75, 0x60 + }; + copy_block(op_store_T1_GPR20_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_load_T2_GPR20,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T2_GPR20 +{ + static const uint8 op_load_T2_GPR20_code[] = { + 0x8b, 0x7d, 0x60 + }; + copy_block(op_load_T2_GPR20_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_store_T2_GPR20,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T2_GPR20 +{ + static const uint8 op_store_T2_GPR20_code[] = { + 0x89, 0x7d, 0x60 + }; + copy_block(op_store_T2_GPR20_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_load_T0_GPR21,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T0_GPR21 +{ + static const uint8 op_load_T0_GPR21_code[] = { + 0x8b, 0x5d, 0x64 + }; + copy_block(op_load_T0_GPR21_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_store_T0_GPR21,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T0_GPR21 +{ + static const uint8 op_store_T0_GPR21_code[] = { + 0x89, 0x5d, 0x64 + }; + copy_block(op_store_T0_GPR21_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_load_T1_GPR21,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T1_GPR21 +{ + static const uint8 op_load_T1_GPR21_code[] = { + 0x8b, 0x75, 0x64 + }; + copy_block(op_load_T1_GPR21_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_store_T1_GPR21,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T1_GPR21 +{ + static const uint8 op_store_T1_GPR21_code[] = { + 0x89, 0x75, 0x64 + }; + copy_block(op_store_T1_GPR21_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_load_T2_GPR21,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T2_GPR21 +{ + static const uint8 op_load_T2_GPR21_code[] = { + 0x8b, 0x7d, 0x64 + }; + copy_block(op_load_T2_GPR21_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_store_T2_GPR21,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T2_GPR21 +{ + static const uint8 op_store_T2_GPR21_code[] = { + 0x89, 0x7d, 0x64 + }; + copy_block(op_store_T2_GPR21_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_load_T0_GPR22,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T0_GPR22 +{ + static const uint8 op_load_T0_GPR22_code[] = { + 0x8b, 0x5d, 0x68 + }; + copy_block(op_load_T0_GPR22_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_store_T0_GPR22,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T0_GPR22 +{ + static const uint8 op_store_T0_GPR22_code[] = { + 0x89, 0x5d, 0x68 + }; + copy_block(op_store_T0_GPR22_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_load_T1_GPR22,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T1_GPR22 +{ + static const uint8 op_load_T1_GPR22_code[] = { + 0x8b, 0x75, 0x68 + }; + copy_block(op_load_T1_GPR22_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_store_T1_GPR22,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T1_GPR22 +{ + static const uint8 op_store_T1_GPR22_code[] = { + 0x89, 0x75, 0x68 + }; + copy_block(op_store_T1_GPR22_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_load_T2_GPR22,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T2_GPR22 +{ + static const uint8 op_load_T2_GPR22_code[] = { + 0x8b, 0x7d, 0x68 + }; + copy_block(op_load_T2_GPR22_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_store_T2_GPR22,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T2_GPR22 +{ + static const uint8 op_store_T2_GPR22_code[] = { + 0x89, 0x7d, 0x68 + }; + copy_block(op_store_T2_GPR22_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_load_T0_GPR23,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T0_GPR23 +{ + static const uint8 op_load_T0_GPR23_code[] = { + 0x8b, 0x5d, 0x6c + }; + copy_block(op_load_T0_GPR23_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_store_T0_GPR23,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T0_GPR23 +{ + static const uint8 op_store_T0_GPR23_code[] = { + 0x89, 0x5d, 0x6c + }; + copy_block(op_store_T0_GPR23_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_load_T1_GPR23,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T1_GPR23 +{ + static const uint8 op_load_T1_GPR23_code[] = { + 0x8b, 0x75, 0x6c + }; + copy_block(op_load_T1_GPR23_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_store_T1_GPR23,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T1_GPR23 +{ + static const uint8 op_store_T1_GPR23_code[] = { + 0x89, 0x75, 0x6c + }; + copy_block(op_store_T1_GPR23_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_load_T2_GPR23,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T2_GPR23 +{ + static const uint8 op_load_T2_GPR23_code[] = { + 0x8b, 0x7d, 0x6c + }; + copy_block(op_load_T2_GPR23_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_store_T2_GPR23,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T2_GPR23 +{ + static const uint8 op_store_T2_GPR23_code[] = { + 0x89, 0x7d, 0x6c + }; + copy_block(op_store_T2_GPR23_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_load_T0_GPR24,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T0_GPR24 +{ + static const uint8 op_load_T0_GPR24_code[] = { + 0x8b, 0x5d, 0x70 + }; + copy_block(op_load_T0_GPR24_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_store_T0_GPR24,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T0_GPR24 +{ + static const uint8 op_store_T0_GPR24_code[] = { + 0x89, 0x5d, 0x70 + }; + copy_block(op_store_T0_GPR24_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_load_T1_GPR24,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T1_GPR24 +{ + static const uint8 op_load_T1_GPR24_code[] = { + 0x8b, 0x75, 0x70 + }; + copy_block(op_load_T1_GPR24_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_store_T1_GPR24,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T1_GPR24 +{ + static const uint8 op_store_T1_GPR24_code[] = { + 0x89, 0x75, 0x70 + }; + copy_block(op_store_T1_GPR24_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_load_T2_GPR24,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T2_GPR24 +{ + static const uint8 op_load_T2_GPR24_code[] = { + 0x8b, 0x7d, 0x70 + }; + copy_block(op_load_T2_GPR24_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_store_T2_GPR24,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T2_GPR24 +{ + static const uint8 op_store_T2_GPR24_code[] = { + 0x89, 0x7d, 0x70 + }; + copy_block(op_store_T2_GPR24_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_load_T0_GPR25,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T0_GPR25 +{ + static const uint8 op_load_T0_GPR25_code[] = { + 0x8b, 0x5d, 0x74 + }; + copy_block(op_load_T0_GPR25_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_store_T0_GPR25,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T0_GPR25 +{ + static const uint8 op_store_T0_GPR25_code[] = { + 0x89, 0x5d, 0x74 + }; + copy_block(op_store_T0_GPR25_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_load_T1_GPR25,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T1_GPR25 +{ + static const uint8 op_load_T1_GPR25_code[] = { + 0x8b, 0x75, 0x74 + }; + copy_block(op_load_T1_GPR25_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_store_T1_GPR25,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T1_GPR25 +{ + static const uint8 op_store_T1_GPR25_code[] = { + 0x89, 0x75, 0x74 + }; + copy_block(op_store_T1_GPR25_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_load_T2_GPR25,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T2_GPR25 +{ + static const uint8 op_load_T2_GPR25_code[] = { + 0x8b, 0x7d, 0x74 + }; + copy_block(op_load_T2_GPR25_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_store_T2_GPR25,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T2_GPR25 +{ + static const uint8 op_store_T2_GPR25_code[] = { + 0x89, 0x7d, 0x74 + }; + copy_block(op_store_T2_GPR25_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_load_T0_GPR26,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T0_GPR26 +{ + static const uint8 op_load_T0_GPR26_code[] = { + 0x8b, 0x5d, 0x78 + }; + copy_block(op_load_T0_GPR26_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_store_T0_GPR26,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T0_GPR26 +{ + static const uint8 op_store_T0_GPR26_code[] = { + 0x89, 0x5d, 0x78 + }; + copy_block(op_store_T0_GPR26_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_load_T1_GPR26,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T1_GPR26 +{ + static const uint8 op_load_T1_GPR26_code[] = { + 0x8b, 0x75, 0x78 + }; + copy_block(op_load_T1_GPR26_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_store_T1_GPR26,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T1_GPR26 +{ + static const uint8 op_store_T1_GPR26_code[] = { + 0x89, 0x75, 0x78 + }; + copy_block(op_store_T1_GPR26_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_load_T2_GPR26,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T2_GPR26 +{ + static const uint8 op_load_T2_GPR26_code[] = { + 0x8b, 0x7d, 0x78 + }; + copy_block(op_load_T2_GPR26_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_store_T2_GPR26,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T2_GPR26 +{ + static const uint8 op_store_T2_GPR26_code[] = { + 0x89, 0x7d, 0x78 + }; + copy_block(op_store_T2_GPR26_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_load_T0_GPR27,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T0_GPR27 +{ + static const uint8 op_load_T0_GPR27_code[] = { + 0x8b, 0x5d, 0x7c + }; + copy_block(op_load_T0_GPR27_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_store_T0_GPR27,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T0_GPR27 +{ + static const uint8 op_store_T0_GPR27_code[] = { + 0x89, 0x5d, 0x7c + }; + copy_block(op_store_T0_GPR27_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_load_T1_GPR27,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T1_GPR27 +{ + static const uint8 op_load_T1_GPR27_code[] = { + 0x8b, 0x75, 0x7c + }; + copy_block(op_load_T1_GPR27_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_store_T1_GPR27,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T1_GPR27 +{ + static const uint8 op_store_T1_GPR27_code[] = { + 0x89, 0x75, 0x7c + }; + copy_block(op_store_T1_GPR27_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_load_T2_GPR27,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T2_GPR27 +{ + static const uint8 op_load_T2_GPR27_code[] = { + 0x8b, 0x7d, 0x7c + }; + copy_block(op_load_T2_GPR27_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_store_T2_GPR27,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T2_GPR27 +{ + static const uint8 op_store_T2_GPR27_code[] = { + 0x89, 0x7d, 0x7c + }; + copy_block(op_store_T2_GPR27_code, 3); + inc_code_ptr(3); +} +#endif + +DEFINE_GEN(gen_op_load_T0_GPR28,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T0_GPR28 +{ + static const uint8 op_load_T0_GPR28_code[] = { + 0x8b, 0x9d, 0x80, 0x00, 0x00, 0x00 + }; + copy_block(op_load_T0_GPR28_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_T0_GPR28,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T0_GPR28 +{ + static const uint8 op_store_T0_GPR28_code[] = { + 0x89, 0x9d, 0x80, 0x00, 0x00, 0x00 + }; + copy_block(op_store_T0_GPR28_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_T1_GPR28,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T1_GPR28 +{ + static const uint8 op_load_T1_GPR28_code[] = { + 0x8b, 0xb5, 0x80, 0x00, 0x00, 0x00 + }; + copy_block(op_load_T1_GPR28_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_T1_GPR28,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T1_GPR28 +{ + static const uint8 op_store_T1_GPR28_code[] = { + 0x89, 0xb5, 0x80, 0x00, 0x00, 0x00 + }; + copy_block(op_store_T1_GPR28_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_T2_GPR28,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T2_GPR28 +{ + static const uint8 op_load_T2_GPR28_code[] = { + 0x8b, 0xbd, 0x80, 0x00, 0x00, 0x00 + }; + copy_block(op_load_T2_GPR28_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_T2_GPR28,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T2_GPR28 +{ + static const uint8 op_store_T2_GPR28_code[] = { + 0x89, 0xbd, 0x80, 0x00, 0x00, 0x00 + }; + copy_block(op_store_T2_GPR28_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_T0_GPR29,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T0_GPR29 +{ + static const uint8 op_load_T0_GPR29_code[] = { + 0x8b, 0x9d, 0x84, 0x00, 0x00, 0x00 + }; + copy_block(op_load_T0_GPR29_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_T0_GPR29,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T0_GPR29 +{ + static const uint8 op_store_T0_GPR29_code[] = { + 0x89, 0x9d, 0x84, 0x00, 0x00, 0x00 + }; + copy_block(op_store_T0_GPR29_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_T1_GPR29,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T1_GPR29 +{ + static const uint8 op_load_T1_GPR29_code[] = { + 0x8b, 0xb5, 0x84, 0x00, 0x00, 0x00 + }; + copy_block(op_load_T1_GPR29_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_T1_GPR29,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T1_GPR29 +{ + static const uint8 op_store_T1_GPR29_code[] = { + 0x89, 0xb5, 0x84, 0x00, 0x00, 0x00 + }; + copy_block(op_store_T1_GPR29_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_T2_GPR29,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T2_GPR29 +{ + static const uint8 op_load_T2_GPR29_code[] = { + 0x8b, 0xbd, 0x84, 0x00, 0x00, 0x00 + }; + copy_block(op_load_T2_GPR29_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_T2_GPR29,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T2_GPR29 +{ + static const uint8 op_store_T2_GPR29_code[] = { + 0x89, 0xbd, 0x84, 0x00, 0x00, 0x00 + }; + copy_block(op_store_T2_GPR29_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_T0_GPR30,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T0_GPR30 +{ + static const uint8 op_load_T0_GPR30_code[] = { + 0x8b, 0x9d, 0x88, 0x00, 0x00, 0x00 + }; + copy_block(op_load_T0_GPR30_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_T0_GPR30,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T0_GPR30 +{ + static const uint8 op_store_T0_GPR30_code[] = { + 0x89, 0x9d, 0x88, 0x00, 0x00, 0x00 + }; + copy_block(op_store_T0_GPR30_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_T1_GPR30,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T1_GPR30 +{ + static const uint8 op_load_T1_GPR30_code[] = { + 0x8b, 0xb5, 0x88, 0x00, 0x00, 0x00 + }; + copy_block(op_load_T1_GPR30_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_T1_GPR30,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T1_GPR30 +{ + static const uint8 op_store_T1_GPR30_code[] = { + 0x89, 0xb5, 0x88, 0x00, 0x00, 0x00 + }; + copy_block(op_store_T1_GPR30_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_T2_GPR30,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T2_GPR30 +{ + static const uint8 op_load_T2_GPR30_code[] = { + 0x8b, 0xbd, 0x88, 0x00, 0x00, 0x00 + }; + copy_block(op_load_T2_GPR30_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_T2_GPR30,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T2_GPR30 +{ + static const uint8 op_store_T2_GPR30_code[] = { + 0x89, 0xbd, 0x88, 0x00, 0x00, 0x00 + }; + copy_block(op_store_T2_GPR30_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_T0_GPR31,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T0_GPR31 +{ + static const uint8 op_load_T0_GPR31_code[] = { + 0x8b, 0x9d, 0x8c, 0x00, 0x00, 0x00 + }; + copy_block(op_load_T0_GPR31_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_T0_GPR31,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T0_GPR31 +{ + static const uint8 op_store_T0_GPR31_code[] = { + 0x89, 0x9d, 0x8c, 0x00, 0x00, 0x00 + }; + copy_block(op_store_T0_GPR31_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_T1_GPR31,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T1_GPR31 +{ + static const uint8 op_load_T1_GPR31_code[] = { + 0x8b, 0xb5, 0x8c, 0x00, 0x00, 0x00 + }; + copy_block(op_load_T1_GPR31_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_T1_GPR31,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T1_GPR31 +{ + static const uint8 op_store_T1_GPR31_code[] = { + 0x89, 0xb5, 0x8c, 0x00, 0x00, 0x00 + }; + copy_block(op_store_T1_GPR31_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_T2_GPR31,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T2_GPR31 +{ + static const uint8 op_load_T2_GPR31_code[] = { + 0x8b, 0xbd, 0x8c, 0x00, 0x00, 0x00 + }; + copy_block(op_load_T2_GPR31_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_T2_GPR31,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T2_GPR31 +{ + static const uint8 op_store_T2_GPR31_code[] = { + 0x89, 0xbd, 0x8c, 0x00, 0x00, 0x00 + }; + copy_block(op_store_T2_GPR31_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_F0_FPR0,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F0_FPR0 +{ + static const uint8 op_load_F0_FPR0_code[] = { + 0x8d, 0x9d, 0x90, 0x00, 0x00, 0x00 + }; + copy_block(op_load_F0_FPR0_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F0_FPR0,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F0_FPR0 +{ + static const uint8 op_store_F0_FPR0_code[] = { + 0x8b, 0x03, 0x8b, 0x53, 0x04, 0x89, 0x85, 0x90, 0x00, 0x00, 0x00, 0x89, + 0x95, 0x94, 0x00, 0x00, 0x00 + }; + copy_block(op_store_F0_FPR0_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_load_F1_FPR0,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F1_FPR0 +{ + static const uint8 op_load_F1_FPR0_code[] = { + 0x8d, 0xb5, 0x90, 0x00, 0x00, 0x00 + }; + copy_block(op_load_F1_FPR0_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F1_FPR0,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F1_FPR0 +{ + static const uint8 op_store_F1_FPR0_code[] = { + 0x8b, 0x06, 0x8b, 0x56, 0x04, 0x89, 0x85, 0x90, 0x00, 0x00, 0x00, 0x89, + 0x95, 0x94, 0x00, 0x00, 0x00 + }; + copy_block(op_store_F1_FPR0_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_load_F2_FPR0,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F2_FPR0 +{ + static const uint8 op_load_F2_FPR0_code[] = { + 0x8d, 0xbd, 0x90, 0x00, 0x00, 0x00 + }; + copy_block(op_load_F2_FPR0_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F2_FPR0,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F2_FPR0 +{ + static const uint8 op_store_F2_FPR0_code[] = { + 0x8b, 0x07, 0x8b, 0x57, 0x04, 0x89, 0x85, 0x90, 0x00, 0x00, 0x00, 0x89, + 0x95, 0x94, 0x00, 0x00, 0x00 + }; + copy_block(op_store_F2_FPR0_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_store_FD_FPR0,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_FD_FPR0 +{ + static const uint8 op_store_FD_FPR0_code[] = { + 0x8b, 0x85, 0x40, 0x08, 0x0e, 0x00, 0x8b, 0x95, 0x44, 0x08, 0x0e, 0x00, + 0x89, 0x85, 0x90, 0x00, 0x00, 0x00, 0x89, 0x95, 0x94, 0x00, 0x00, 0x00 + }; + copy_block(op_store_FD_FPR0_code, 24); + inc_code_ptr(24); +} +#endif + +DEFINE_GEN(gen_op_load_F0_FPR1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F0_FPR1 +{ + static const uint8 op_load_F0_FPR1_code[] = { + 0x8d, 0x9d, 0x98, 0x00, 0x00, 0x00 + }; + copy_block(op_load_F0_FPR1_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F0_FPR1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F0_FPR1 +{ + static const uint8 op_store_F0_FPR1_code[] = { + 0x8b, 0x03, 0x8b, 0x53, 0x04, 0x89, 0x85, 0x98, 0x00, 0x00, 0x00, 0x89, + 0x95, 0x9c, 0x00, 0x00, 0x00 + }; + copy_block(op_store_F0_FPR1_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_load_F1_FPR1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F1_FPR1 +{ + static const uint8 op_load_F1_FPR1_code[] = { + 0x8d, 0xb5, 0x98, 0x00, 0x00, 0x00 + }; + copy_block(op_load_F1_FPR1_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F1_FPR1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F1_FPR1 +{ + static const uint8 op_store_F1_FPR1_code[] = { + 0x8b, 0x06, 0x8b, 0x56, 0x04, 0x89, 0x85, 0x98, 0x00, 0x00, 0x00, 0x89, + 0x95, 0x9c, 0x00, 0x00, 0x00 + }; + copy_block(op_store_F1_FPR1_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_load_F2_FPR1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F2_FPR1 +{ + static const uint8 op_load_F2_FPR1_code[] = { + 0x8d, 0xbd, 0x98, 0x00, 0x00, 0x00 + }; + copy_block(op_load_F2_FPR1_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F2_FPR1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F2_FPR1 +{ + static const uint8 op_store_F2_FPR1_code[] = { + 0x8b, 0x07, 0x8b, 0x57, 0x04, 0x89, 0x85, 0x98, 0x00, 0x00, 0x00, 0x89, + 0x95, 0x9c, 0x00, 0x00, 0x00 + }; + copy_block(op_store_F2_FPR1_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_store_FD_FPR1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_FD_FPR1 +{ + static const uint8 op_store_FD_FPR1_code[] = { + 0x8b, 0x85, 0x40, 0x08, 0x0e, 0x00, 0x8b, 0x95, 0x44, 0x08, 0x0e, 0x00, + 0x89, 0x85, 0x98, 0x00, 0x00, 0x00, 0x89, 0x95, 0x9c, 0x00, 0x00, 0x00 + }; + copy_block(op_store_FD_FPR1_code, 24); + inc_code_ptr(24); +} +#endif + +DEFINE_GEN(gen_op_load_F0_FPR2,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F0_FPR2 +{ + static const uint8 op_load_F0_FPR2_code[] = { + 0x8d, 0x9d, 0xa0, 0x00, 0x00, 0x00 + }; + copy_block(op_load_F0_FPR2_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F0_FPR2,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F0_FPR2 +{ + static const uint8 op_store_F0_FPR2_code[] = { + 0x8b, 0x03, 0x8b, 0x53, 0x04, 0x89, 0x85, 0xa0, 0x00, 0x00, 0x00, 0x89, + 0x95, 0xa4, 0x00, 0x00, 0x00 + }; + copy_block(op_store_F0_FPR2_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_load_F1_FPR2,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F1_FPR2 +{ + static const uint8 op_load_F1_FPR2_code[] = { + 0x8d, 0xb5, 0xa0, 0x00, 0x00, 0x00 + }; + copy_block(op_load_F1_FPR2_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F1_FPR2,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F1_FPR2 +{ + static const uint8 op_store_F1_FPR2_code[] = { + 0x8b, 0x06, 0x8b, 0x56, 0x04, 0x89, 0x85, 0xa0, 0x00, 0x00, 0x00, 0x89, + 0x95, 0xa4, 0x00, 0x00, 0x00 + }; + copy_block(op_store_F1_FPR2_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_load_F2_FPR2,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F2_FPR2 +{ + static const uint8 op_load_F2_FPR2_code[] = { + 0x8d, 0xbd, 0xa0, 0x00, 0x00, 0x00 + }; + copy_block(op_load_F2_FPR2_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F2_FPR2,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F2_FPR2 +{ + static const uint8 op_store_F2_FPR2_code[] = { + 0x8b, 0x07, 0x8b, 0x57, 0x04, 0x89, 0x85, 0xa0, 0x00, 0x00, 0x00, 0x89, + 0x95, 0xa4, 0x00, 0x00, 0x00 + }; + copy_block(op_store_F2_FPR2_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_store_FD_FPR2,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_FD_FPR2 +{ + static const uint8 op_store_FD_FPR2_code[] = { + 0x8b, 0x85, 0x40, 0x08, 0x0e, 0x00, 0x8b, 0x95, 0x44, 0x08, 0x0e, 0x00, + 0x89, 0x85, 0xa0, 0x00, 0x00, 0x00, 0x89, 0x95, 0xa4, 0x00, 0x00, 0x00 + }; + copy_block(op_store_FD_FPR2_code, 24); + inc_code_ptr(24); +} +#endif + +DEFINE_GEN(gen_op_load_F0_FPR3,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F0_FPR3 +{ + static const uint8 op_load_F0_FPR3_code[] = { + 0x8d, 0x9d, 0xa8, 0x00, 0x00, 0x00 + }; + copy_block(op_load_F0_FPR3_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F0_FPR3,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F0_FPR3 +{ + static const uint8 op_store_F0_FPR3_code[] = { + 0x8b, 0x03, 0x8b, 0x53, 0x04, 0x89, 0x85, 0xa8, 0x00, 0x00, 0x00, 0x89, + 0x95, 0xac, 0x00, 0x00, 0x00 + }; + copy_block(op_store_F0_FPR3_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_load_F1_FPR3,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F1_FPR3 +{ + static const uint8 op_load_F1_FPR3_code[] = { + 0x8d, 0xb5, 0xa8, 0x00, 0x00, 0x00 + }; + copy_block(op_load_F1_FPR3_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F1_FPR3,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F1_FPR3 +{ + static const uint8 op_store_F1_FPR3_code[] = { + 0x8b, 0x06, 0x8b, 0x56, 0x04, 0x89, 0x85, 0xa8, 0x00, 0x00, 0x00, 0x89, + 0x95, 0xac, 0x00, 0x00, 0x00 + }; + copy_block(op_store_F1_FPR3_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_load_F2_FPR3,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F2_FPR3 +{ + static const uint8 op_load_F2_FPR3_code[] = { + 0x8d, 0xbd, 0xa8, 0x00, 0x00, 0x00 + }; + copy_block(op_load_F2_FPR3_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F2_FPR3,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F2_FPR3 +{ + static const uint8 op_store_F2_FPR3_code[] = { + 0x8b, 0x07, 0x8b, 0x57, 0x04, 0x89, 0x85, 0xa8, 0x00, 0x00, 0x00, 0x89, + 0x95, 0xac, 0x00, 0x00, 0x00 + }; + copy_block(op_store_F2_FPR3_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_store_FD_FPR3,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_FD_FPR3 +{ + static const uint8 op_store_FD_FPR3_code[] = { + 0x8b, 0x85, 0x40, 0x08, 0x0e, 0x00, 0x8b, 0x95, 0x44, 0x08, 0x0e, 0x00, + 0x89, 0x85, 0xa8, 0x00, 0x00, 0x00, 0x89, 0x95, 0xac, 0x00, 0x00, 0x00 + }; + copy_block(op_store_FD_FPR3_code, 24); + inc_code_ptr(24); +} +#endif + +DEFINE_GEN(gen_op_load_F0_FPR4,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F0_FPR4 +{ + static const uint8 op_load_F0_FPR4_code[] = { + 0x8d, 0x9d, 0xb0, 0x00, 0x00, 0x00 + }; + copy_block(op_load_F0_FPR4_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F0_FPR4,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F0_FPR4 +{ + static const uint8 op_store_F0_FPR4_code[] = { + 0x8b, 0x03, 0x8b, 0x53, 0x04, 0x89, 0x85, 0xb0, 0x00, 0x00, 0x00, 0x89, + 0x95, 0xb4, 0x00, 0x00, 0x00 + }; + copy_block(op_store_F0_FPR4_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_load_F1_FPR4,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F1_FPR4 +{ + static const uint8 op_load_F1_FPR4_code[] = { + 0x8d, 0xb5, 0xb0, 0x00, 0x00, 0x00 + }; + copy_block(op_load_F1_FPR4_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F1_FPR4,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F1_FPR4 +{ + static const uint8 op_store_F1_FPR4_code[] = { + 0x8b, 0x06, 0x8b, 0x56, 0x04, 0x89, 0x85, 0xb0, 0x00, 0x00, 0x00, 0x89, + 0x95, 0xb4, 0x00, 0x00, 0x00 + }; + copy_block(op_store_F1_FPR4_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_load_F2_FPR4,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F2_FPR4 +{ + static const uint8 op_load_F2_FPR4_code[] = { + 0x8d, 0xbd, 0xb0, 0x00, 0x00, 0x00 + }; + copy_block(op_load_F2_FPR4_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F2_FPR4,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F2_FPR4 +{ + static const uint8 op_store_F2_FPR4_code[] = { + 0x8b, 0x07, 0x8b, 0x57, 0x04, 0x89, 0x85, 0xb0, 0x00, 0x00, 0x00, 0x89, + 0x95, 0xb4, 0x00, 0x00, 0x00 + }; + copy_block(op_store_F2_FPR4_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_store_FD_FPR4,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_FD_FPR4 +{ + static const uint8 op_store_FD_FPR4_code[] = { + 0x8b, 0x85, 0x40, 0x08, 0x0e, 0x00, 0x8b, 0x95, 0x44, 0x08, 0x0e, 0x00, + 0x89, 0x85, 0xb0, 0x00, 0x00, 0x00, 0x89, 0x95, 0xb4, 0x00, 0x00, 0x00 + }; + copy_block(op_store_FD_FPR4_code, 24); + inc_code_ptr(24); +} +#endif + +DEFINE_GEN(gen_op_load_F0_FPR5,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F0_FPR5 +{ + static const uint8 op_load_F0_FPR5_code[] = { + 0x8d, 0x9d, 0xb8, 0x00, 0x00, 0x00 + }; + copy_block(op_load_F0_FPR5_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F0_FPR5,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F0_FPR5 +{ + static const uint8 op_store_F0_FPR5_code[] = { + 0x8b, 0x03, 0x8b, 0x53, 0x04, 0x89, 0x85, 0xb8, 0x00, 0x00, 0x00, 0x89, + 0x95, 0xbc, 0x00, 0x00, 0x00 + }; + copy_block(op_store_F0_FPR5_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_load_F1_FPR5,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F1_FPR5 +{ + static const uint8 op_load_F1_FPR5_code[] = { + 0x8d, 0xb5, 0xb8, 0x00, 0x00, 0x00 + }; + copy_block(op_load_F1_FPR5_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F1_FPR5,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F1_FPR5 +{ + static const uint8 op_store_F1_FPR5_code[] = { + 0x8b, 0x06, 0x8b, 0x56, 0x04, 0x89, 0x85, 0xb8, 0x00, 0x00, 0x00, 0x89, + 0x95, 0xbc, 0x00, 0x00, 0x00 + }; + copy_block(op_store_F1_FPR5_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_load_F2_FPR5,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F2_FPR5 +{ + static const uint8 op_load_F2_FPR5_code[] = { + 0x8d, 0xbd, 0xb8, 0x00, 0x00, 0x00 + }; + copy_block(op_load_F2_FPR5_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F2_FPR5,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F2_FPR5 +{ + static const uint8 op_store_F2_FPR5_code[] = { + 0x8b, 0x07, 0x8b, 0x57, 0x04, 0x89, 0x85, 0xb8, 0x00, 0x00, 0x00, 0x89, + 0x95, 0xbc, 0x00, 0x00, 0x00 + }; + copy_block(op_store_F2_FPR5_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_store_FD_FPR5,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_FD_FPR5 +{ + static const uint8 op_store_FD_FPR5_code[] = { + 0x8b, 0x85, 0x40, 0x08, 0x0e, 0x00, 0x8b, 0x95, 0x44, 0x08, 0x0e, 0x00, + 0x89, 0x85, 0xb8, 0x00, 0x00, 0x00, 0x89, 0x95, 0xbc, 0x00, 0x00, 0x00 + }; + copy_block(op_store_FD_FPR5_code, 24); + inc_code_ptr(24); +} +#endif + +DEFINE_GEN(gen_op_load_F0_FPR6,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F0_FPR6 +{ + static const uint8 op_load_F0_FPR6_code[] = { + 0x8d, 0x9d, 0xc0, 0x00, 0x00, 0x00 + }; + copy_block(op_load_F0_FPR6_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F0_FPR6,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F0_FPR6 +{ + static const uint8 op_store_F0_FPR6_code[] = { + 0x8b, 0x03, 0x8b, 0x53, 0x04, 0x89, 0x85, 0xc0, 0x00, 0x00, 0x00, 0x89, + 0x95, 0xc4, 0x00, 0x00, 0x00 + }; + copy_block(op_store_F0_FPR6_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_load_F1_FPR6,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F1_FPR6 +{ + static const uint8 op_load_F1_FPR6_code[] = { + 0x8d, 0xb5, 0xc0, 0x00, 0x00, 0x00 + }; + copy_block(op_load_F1_FPR6_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F1_FPR6,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F1_FPR6 +{ + static const uint8 op_store_F1_FPR6_code[] = { + 0x8b, 0x06, 0x8b, 0x56, 0x04, 0x89, 0x85, 0xc0, 0x00, 0x00, 0x00, 0x89, + 0x95, 0xc4, 0x00, 0x00, 0x00 + }; + copy_block(op_store_F1_FPR6_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_load_F2_FPR6,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F2_FPR6 +{ + static const uint8 op_load_F2_FPR6_code[] = { + 0x8d, 0xbd, 0xc0, 0x00, 0x00, 0x00 + }; + copy_block(op_load_F2_FPR6_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F2_FPR6,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F2_FPR6 +{ + static const uint8 op_store_F2_FPR6_code[] = { + 0x8b, 0x07, 0x8b, 0x57, 0x04, 0x89, 0x85, 0xc0, 0x00, 0x00, 0x00, 0x89, + 0x95, 0xc4, 0x00, 0x00, 0x00 + }; + copy_block(op_store_F2_FPR6_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_store_FD_FPR6,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_FD_FPR6 +{ + static const uint8 op_store_FD_FPR6_code[] = { + 0x8b, 0x85, 0x40, 0x08, 0x0e, 0x00, 0x8b, 0x95, 0x44, 0x08, 0x0e, 0x00, + 0x89, 0x85, 0xc0, 0x00, 0x00, 0x00, 0x89, 0x95, 0xc4, 0x00, 0x00, 0x00 + }; + copy_block(op_store_FD_FPR6_code, 24); + inc_code_ptr(24); +} +#endif + +DEFINE_GEN(gen_op_load_F0_FPR7,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F0_FPR7 +{ + static const uint8 op_load_F0_FPR7_code[] = { + 0x8d, 0x9d, 0xc8, 0x00, 0x00, 0x00 + }; + copy_block(op_load_F0_FPR7_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F0_FPR7,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F0_FPR7 +{ + static const uint8 op_store_F0_FPR7_code[] = { + 0x8b, 0x03, 0x8b, 0x53, 0x04, 0x89, 0x85, 0xc8, 0x00, 0x00, 0x00, 0x89, + 0x95, 0xcc, 0x00, 0x00, 0x00 + }; + copy_block(op_store_F0_FPR7_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_load_F1_FPR7,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F1_FPR7 +{ + static const uint8 op_load_F1_FPR7_code[] = { + 0x8d, 0xb5, 0xc8, 0x00, 0x00, 0x00 + }; + copy_block(op_load_F1_FPR7_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F1_FPR7,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F1_FPR7 +{ + static const uint8 op_store_F1_FPR7_code[] = { + 0x8b, 0x06, 0x8b, 0x56, 0x04, 0x89, 0x85, 0xc8, 0x00, 0x00, 0x00, 0x89, + 0x95, 0xcc, 0x00, 0x00, 0x00 + }; + copy_block(op_store_F1_FPR7_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_load_F2_FPR7,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F2_FPR7 +{ + static const uint8 op_load_F2_FPR7_code[] = { + 0x8d, 0xbd, 0xc8, 0x00, 0x00, 0x00 + }; + copy_block(op_load_F2_FPR7_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F2_FPR7,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F2_FPR7 +{ + static const uint8 op_store_F2_FPR7_code[] = { + 0x8b, 0x07, 0x8b, 0x57, 0x04, 0x89, 0x85, 0xc8, 0x00, 0x00, 0x00, 0x89, + 0x95, 0xcc, 0x00, 0x00, 0x00 + }; + copy_block(op_store_F2_FPR7_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_store_FD_FPR7,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_FD_FPR7 +{ + static const uint8 op_store_FD_FPR7_code[] = { + 0x8b, 0x85, 0x40, 0x08, 0x0e, 0x00, 0x8b, 0x95, 0x44, 0x08, 0x0e, 0x00, + 0x89, 0x85, 0xc8, 0x00, 0x00, 0x00, 0x89, 0x95, 0xcc, 0x00, 0x00, 0x00 + }; + copy_block(op_store_FD_FPR7_code, 24); + inc_code_ptr(24); +} +#endif + +DEFINE_GEN(gen_op_load_F0_FPR8,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F0_FPR8 +{ + static const uint8 op_load_F0_FPR8_code[] = { + 0x8d, 0x9d, 0xd0, 0x00, 0x00, 0x00 + }; + copy_block(op_load_F0_FPR8_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F0_FPR8,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F0_FPR8 +{ + static const uint8 op_store_F0_FPR8_code[] = { + 0x8b, 0x03, 0x8b, 0x53, 0x04, 0x89, 0x85, 0xd0, 0x00, 0x00, 0x00, 0x89, + 0x95, 0xd4, 0x00, 0x00, 0x00 + }; + copy_block(op_store_F0_FPR8_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_load_F1_FPR8,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F1_FPR8 +{ + static const uint8 op_load_F1_FPR8_code[] = { + 0x8d, 0xb5, 0xd0, 0x00, 0x00, 0x00 + }; + copy_block(op_load_F1_FPR8_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F1_FPR8,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F1_FPR8 +{ + static const uint8 op_store_F1_FPR8_code[] = { + 0x8b, 0x06, 0x8b, 0x56, 0x04, 0x89, 0x85, 0xd0, 0x00, 0x00, 0x00, 0x89, + 0x95, 0xd4, 0x00, 0x00, 0x00 + }; + copy_block(op_store_F1_FPR8_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_load_F2_FPR8,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F2_FPR8 +{ + static const uint8 op_load_F2_FPR8_code[] = { + 0x8d, 0xbd, 0xd0, 0x00, 0x00, 0x00 + }; + copy_block(op_load_F2_FPR8_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F2_FPR8,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F2_FPR8 +{ + static const uint8 op_store_F2_FPR8_code[] = { + 0x8b, 0x07, 0x8b, 0x57, 0x04, 0x89, 0x85, 0xd0, 0x00, 0x00, 0x00, 0x89, + 0x95, 0xd4, 0x00, 0x00, 0x00 + }; + copy_block(op_store_F2_FPR8_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_store_FD_FPR8,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_FD_FPR8 +{ + static const uint8 op_store_FD_FPR8_code[] = { + 0x8b, 0x85, 0x40, 0x08, 0x0e, 0x00, 0x8b, 0x95, 0x44, 0x08, 0x0e, 0x00, + 0x89, 0x85, 0xd0, 0x00, 0x00, 0x00, 0x89, 0x95, 0xd4, 0x00, 0x00, 0x00 + }; + copy_block(op_store_FD_FPR8_code, 24); + inc_code_ptr(24); +} +#endif + +DEFINE_GEN(gen_op_load_F0_FPR9,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F0_FPR9 +{ + static const uint8 op_load_F0_FPR9_code[] = { + 0x8d, 0x9d, 0xd8, 0x00, 0x00, 0x00 + }; + copy_block(op_load_F0_FPR9_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F0_FPR9,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F0_FPR9 +{ + static const uint8 op_store_F0_FPR9_code[] = { + 0x8b, 0x03, 0x8b, 0x53, 0x04, 0x89, 0x85, 0xd8, 0x00, 0x00, 0x00, 0x89, + 0x95, 0xdc, 0x00, 0x00, 0x00 + }; + copy_block(op_store_F0_FPR9_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_load_F1_FPR9,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F1_FPR9 +{ + static const uint8 op_load_F1_FPR9_code[] = { + 0x8d, 0xb5, 0xd8, 0x00, 0x00, 0x00 + }; + copy_block(op_load_F1_FPR9_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F1_FPR9,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F1_FPR9 +{ + static const uint8 op_store_F1_FPR9_code[] = { + 0x8b, 0x06, 0x8b, 0x56, 0x04, 0x89, 0x85, 0xd8, 0x00, 0x00, 0x00, 0x89, + 0x95, 0xdc, 0x00, 0x00, 0x00 + }; + copy_block(op_store_F1_FPR9_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_load_F2_FPR9,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F2_FPR9 +{ + static const uint8 op_load_F2_FPR9_code[] = { + 0x8d, 0xbd, 0xd8, 0x00, 0x00, 0x00 + }; + copy_block(op_load_F2_FPR9_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F2_FPR9,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F2_FPR9 +{ + static const uint8 op_store_F2_FPR9_code[] = { + 0x8b, 0x07, 0x8b, 0x57, 0x04, 0x89, 0x85, 0xd8, 0x00, 0x00, 0x00, 0x89, + 0x95, 0xdc, 0x00, 0x00, 0x00 + }; + copy_block(op_store_F2_FPR9_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_store_FD_FPR9,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_FD_FPR9 +{ + static const uint8 op_store_FD_FPR9_code[] = { + 0x8b, 0x85, 0x40, 0x08, 0x0e, 0x00, 0x8b, 0x95, 0x44, 0x08, 0x0e, 0x00, + 0x89, 0x85, 0xd8, 0x00, 0x00, 0x00, 0x89, 0x95, 0xdc, 0x00, 0x00, 0x00 + }; + copy_block(op_store_FD_FPR9_code, 24); + inc_code_ptr(24); +} +#endif + +DEFINE_GEN(gen_op_load_F0_FPR10,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F0_FPR10 +{ + static const uint8 op_load_F0_FPR10_code[] = { + 0x8d, 0x9d, 0xe0, 0x00, 0x00, 0x00 + }; + copy_block(op_load_F0_FPR10_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F0_FPR10,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F0_FPR10 +{ + static const uint8 op_store_F0_FPR10_code[] = { + 0x8b, 0x03, 0x8b, 0x53, 0x04, 0x89, 0x85, 0xe0, 0x00, 0x00, 0x00, 0x89, + 0x95, 0xe4, 0x00, 0x00, 0x00 + }; + copy_block(op_store_F0_FPR10_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_load_F1_FPR10,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F1_FPR10 +{ + static const uint8 op_load_F1_FPR10_code[] = { + 0x8d, 0xb5, 0xe0, 0x00, 0x00, 0x00 + }; + copy_block(op_load_F1_FPR10_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F1_FPR10,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F1_FPR10 +{ + static const uint8 op_store_F1_FPR10_code[] = { + 0x8b, 0x06, 0x8b, 0x56, 0x04, 0x89, 0x85, 0xe0, 0x00, 0x00, 0x00, 0x89, + 0x95, 0xe4, 0x00, 0x00, 0x00 + }; + copy_block(op_store_F1_FPR10_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_load_F2_FPR10,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F2_FPR10 +{ + static const uint8 op_load_F2_FPR10_code[] = { + 0x8d, 0xbd, 0xe0, 0x00, 0x00, 0x00 + }; + copy_block(op_load_F2_FPR10_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F2_FPR10,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F2_FPR10 +{ + static const uint8 op_store_F2_FPR10_code[] = { + 0x8b, 0x07, 0x8b, 0x57, 0x04, 0x89, 0x85, 0xe0, 0x00, 0x00, 0x00, 0x89, + 0x95, 0xe4, 0x00, 0x00, 0x00 + }; + copy_block(op_store_F2_FPR10_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_store_FD_FPR10,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_FD_FPR10 +{ + static const uint8 op_store_FD_FPR10_code[] = { + 0x8b, 0x85, 0x40, 0x08, 0x0e, 0x00, 0x8b, 0x95, 0x44, 0x08, 0x0e, 0x00, + 0x89, 0x85, 0xe0, 0x00, 0x00, 0x00, 0x89, 0x95, 0xe4, 0x00, 0x00, 0x00 + }; + copy_block(op_store_FD_FPR10_code, 24); + inc_code_ptr(24); +} +#endif + +DEFINE_GEN(gen_op_load_F0_FPR11,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F0_FPR11 +{ + static const uint8 op_load_F0_FPR11_code[] = { + 0x8d, 0x9d, 0xe8, 0x00, 0x00, 0x00 + }; + copy_block(op_load_F0_FPR11_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F0_FPR11,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F0_FPR11 +{ + static const uint8 op_store_F0_FPR11_code[] = { + 0x8b, 0x03, 0x8b, 0x53, 0x04, 0x89, 0x85, 0xe8, 0x00, 0x00, 0x00, 0x89, + 0x95, 0xec, 0x00, 0x00, 0x00 + }; + copy_block(op_store_F0_FPR11_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_load_F1_FPR11,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F1_FPR11 +{ + static const uint8 op_load_F1_FPR11_code[] = { + 0x8d, 0xb5, 0xe8, 0x00, 0x00, 0x00 + }; + copy_block(op_load_F1_FPR11_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F1_FPR11,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F1_FPR11 +{ + static const uint8 op_store_F1_FPR11_code[] = { + 0x8b, 0x06, 0x8b, 0x56, 0x04, 0x89, 0x85, 0xe8, 0x00, 0x00, 0x00, 0x89, + 0x95, 0xec, 0x00, 0x00, 0x00 + }; + copy_block(op_store_F1_FPR11_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_load_F2_FPR11,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F2_FPR11 +{ + static const uint8 op_load_F2_FPR11_code[] = { + 0x8d, 0xbd, 0xe8, 0x00, 0x00, 0x00 + }; + copy_block(op_load_F2_FPR11_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F2_FPR11,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F2_FPR11 +{ + static const uint8 op_store_F2_FPR11_code[] = { + 0x8b, 0x07, 0x8b, 0x57, 0x04, 0x89, 0x85, 0xe8, 0x00, 0x00, 0x00, 0x89, + 0x95, 0xec, 0x00, 0x00, 0x00 + }; + copy_block(op_store_F2_FPR11_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_store_FD_FPR11,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_FD_FPR11 +{ + static const uint8 op_store_FD_FPR11_code[] = { + 0x8b, 0x85, 0x40, 0x08, 0x0e, 0x00, 0x8b, 0x95, 0x44, 0x08, 0x0e, 0x00, + 0x89, 0x85, 0xe8, 0x00, 0x00, 0x00, 0x89, 0x95, 0xec, 0x00, 0x00, 0x00 + }; + copy_block(op_store_FD_FPR11_code, 24); + inc_code_ptr(24); +} +#endif + +DEFINE_GEN(gen_op_load_F0_FPR12,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F0_FPR12 +{ + static const uint8 op_load_F0_FPR12_code[] = { + 0x8d, 0x9d, 0xf0, 0x00, 0x00, 0x00 + }; + copy_block(op_load_F0_FPR12_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F0_FPR12,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F0_FPR12 +{ + static const uint8 op_store_F0_FPR12_code[] = { + 0x8b, 0x03, 0x8b, 0x53, 0x04, 0x89, 0x85, 0xf0, 0x00, 0x00, 0x00, 0x89, + 0x95, 0xf4, 0x00, 0x00, 0x00 + }; + copy_block(op_store_F0_FPR12_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_load_F1_FPR12,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F1_FPR12 +{ + static const uint8 op_load_F1_FPR12_code[] = { + 0x8d, 0xb5, 0xf0, 0x00, 0x00, 0x00 + }; + copy_block(op_load_F1_FPR12_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F1_FPR12,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F1_FPR12 +{ + static const uint8 op_store_F1_FPR12_code[] = { + 0x8b, 0x06, 0x8b, 0x56, 0x04, 0x89, 0x85, 0xf0, 0x00, 0x00, 0x00, 0x89, + 0x95, 0xf4, 0x00, 0x00, 0x00 + }; + copy_block(op_store_F1_FPR12_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_load_F2_FPR12,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F2_FPR12 +{ + static const uint8 op_load_F2_FPR12_code[] = { + 0x8d, 0xbd, 0xf0, 0x00, 0x00, 0x00 + }; + copy_block(op_load_F2_FPR12_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F2_FPR12,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F2_FPR12 +{ + static const uint8 op_store_F2_FPR12_code[] = { + 0x8b, 0x07, 0x8b, 0x57, 0x04, 0x89, 0x85, 0xf0, 0x00, 0x00, 0x00, 0x89, + 0x95, 0xf4, 0x00, 0x00, 0x00 + }; + copy_block(op_store_F2_FPR12_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_store_FD_FPR12,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_FD_FPR12 +{ + static const uint8 op_store_FD_FPR12_code[] = { + 0x8b, 0x85, 0x40, 0x08, 0x0e, 0x00, 0x8b, 0x95, 0x44, 0x08, 0x0e, 0x00, + 0x89, 0x85, 0xf0, 0x00, 0x00, 0x00, 0x89, 0x95, 0xf4, 0x00, 0x00, 0x00 + }; + copy_block(op_store_FD_FPR12_code, 24); + inc_code_ptr(24); +} +#endif + +DEFINE_GEN(gen_op_load_F0_FPR13,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F0_FPR13 +{ + static const uint8 op_load_F0_FPR13_code[] = { + 0x8d, 0x9d, 0xf8, 0x00, 0x00, 0x00 + }; + copy_block(op_load_F0_FPR13_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F0_FPR13,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F0_FPR13 +{ + static const uint8 op_store_F0_FPR13_code[] = { + 0x8b, 0x03, 0x8b, 0x53, 0x04, 0x89, 0x85, 0xf8, 0x00, 0x00, 0x00, 0x89, + 0x95, 0xfc, 0x00, 0x00, 0x00 + }; + copy_block(op_store_F0_FPR13_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_load_F1_FPR13,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F1_FPR13 +{ + static const uint8 op_load_F1_FPR13_code[] = { + 0x8d, 0xb5, 0xf8, 0x00, 0x00, 0x00 + }; + copy_block(op_load_F1_FPR13_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F1_FPR13,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F1_FPR13 +{ + static const uint8 op_store_F1_FPR13_code[] = { + 0x8b, 0x06, 0x8b, 0x56, 0x04, 0x89, 0x85, 0xf8, 0x00, 0x00, 0x00, 0x89, + 0x95, 0xfc, 0x00, 0x00, 0x00 + }; + copy_block(op_store_F1_FPR13_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_load_F2_FPR13,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F2_FPR13 +{ + static const uint8 op_load_F2_FPR13_code[] = { + 0x8d, 0xbd, 0xf8, 0x00, 0x00, 0x00 + }; + copy_block(op_load_F2_FPR13_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F2_FPR13,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F2_FPR13 +{ + static const uint8 op_store_F2_FPR13_code[] = { + 0x8b, 0x07, 0x8b, 0x57, 0x04, 0x89, 0x85, 0xf8, 0x00, 0x00, 0x00, 0x89, + 0x95, 0xfc, 0x00, 0x00, 0x00 + }; + copy_block(op_store_F2_FPR13_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_store_FD_FPR13,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_FD_FPR13 +{ + static const uint8 op_store_FD_FPR13_code[] = { + 0x8b, 0x85, 0x40, 0x08, 0x0e, 0x00, 0x8b, 0x95, 0x44, 0x08, 0x0e, 0x00, + 0x89, 0x85, 0xf8, 0x00, 0x00, 0x00, 0x89, 0x95, 0xfc, 0x00, 0x00, 0x00 + }; + copy_block(op_store_FD_FPR13_code, 24); + inc_code_ptr(24); +} +#endif + +DEFINE_GEN(gen_op_load_F0_FPR14,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F0_FPR14 +{ + static const uint8 op_load_F0_FPR14_code[] = { + 0x8d, 0x9d, 0x00, 0x01, 0x00, 0x00 + }; + copy_block(op_load_F0_FPR14_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F0_FPR14,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F0_FPR14 +{ + static const uint8 op_store_F0_FPR14_code[] = { + 0x8b, 0x03, 0x8b, 0x53, 0x04, 0x89, 0x85, 0x00, 0x01, 0x00, 0x00, 0x89, + 0x95, 0x04, 0x01, 0x00, 0x00 + }; + copy_block(op_store_F0_FPR14_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_load_F1_FPR14,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F1_FPR14 +{ + static const uint8 op_load_F1_FPR14_code[] = { + 0x8d, 0xb5, 0x00, 0x01, 0x00, 0x00 + }; + copy_block(op_load_F1_FPR14_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F1_FPR14,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F1_FPR14 +{ + static const uint8 op_store_F1_FPR14_code[] = { + 0x8b, 0x06, 0x8b, 0x56, 0x04, 0x89, 0x85, 0x00, 0x01, 0x00, 0x00, 0x89, + 0x95, 0x04, 0x01, 0x00, 0x00 + }; + copy_block(op_store_F1_FPR14_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_load_F2_FPR14,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F2_FPR14 +{ + static const uint8 op_load_F2_FPR14_code[] = { + 0x8d, 0xbd, 0x00, 0x01, 0x00, 0x00 + }; + copy_block(op_load_F2_FPR14_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F2_FPR14,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F2_FPR14 +{ + static const uint8 op_store_F2_FPR14_code[] = { + 0x8b, 0x07, 0x8b, 0x57, 0x04, 0x89, 0x85, 0x00, 0x01, 0x00, 0x00, 0x89, + 0x95, 0x04, 0x01, 0x00, 0x00 + }; + copy_block(op_store_F2_FPR14_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_store_FD_FPR14,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_FD_FPR14 +{ + static const uint8 op_store_FD_FPR14_code[] = { + 0x8b, 0x85, 0x40, 0x08, 0x0e, 0x00, 0x8b, 0x95, 0x44, 0x08, 0x0e, 0x00, + 0x89, 0x85, 0x00, 0x01, 0x00, 0x00, 0x89, 0x95, 0x04, 0x01, 0x00, 0x00 + }; + copy_block(op_store_FD_FPR14_code, 24); + inc_code_ptr(24); +} +#endif + +DEFINE_GEN(gen_op_load_F0_FPR15,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F0_FPR15 +{ + static const uint8 op_load_F0_FPR15_code[] = { + 0x8d, 0x9d, 0x08, 0x01, 0x00, 0x00 + }; + copy_block(op_load_F0_FPR15_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F0_FPR15,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F0_FPR15 +{ + static const uint8 op_store_F0_FPR15_code[] = { + 0x8b, 0x03, 0x8b, 0x53, 0x04, 0x89, 0x85, 0x08, 0x01, 0x00, 0x00, 0x89, + 0x95, 0x0c, 0x01, 0x00, 0x00 + }; + copy_block(op_store_F0_FPR15_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_load_F1_FPR15,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F1_FPR15 +{ + static const uint8 op_load_F1_FPR15_code[] = { + 0x8d, 0xb5, 0x08, 0x01, 0x00, 0x00 + }; + copy_block(op_load_F1_FPR15_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F1_FPR15,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F1_FPR15 +{ + static const uint8 op_store_F1_FPR15_code[] = { + 0x8b, 0x06, 0x8b, 0x56, 0x04, 0x89, 0x85, 0x08, 0x01, 0x00, 0x00, 0x89, + 0x95, 0x0c, 0x01, 0x00, 0x00 + }; + copy_block(op_store_F1_FPR15_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_load_F2_FPR15,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F2_FPR15 +{ + static const uint8 op_load_F2_FPR15_code[] = { + 0x8d, 0xbd, 0x08, 0x01, 0x00, 0x00 + }; + copy_block(op_load_F2_FPR15_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F2_FPR15,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F2_FPR15 +{ + static const uint8 op_store_F2_FPR15_code[] = { + 0x8b, 0x07, 0x8b, 0x57, 0x04, 0x89, 0x85, 0x08, 0x01, 0x00, 0x00, 0x89, + 0x95, 0x0c, 0x01, 0x00, 0x00 + }; + copy_block(op_store_F2_FPR15_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_store_FD_FPR15,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_FD_FPR15 +{ + static const uint8 op_store_FD_FPR15_code[] = { + 0x8b, 0x85, 0x40, 0x08, 0x0e, 0x00, 0x8b, 0x95, 0x44, 0x08, 0x0e, 0x00, + 0x89, 0x85, 0x08, 0x01, 0x00, 0x00, 0x89, 0x95, 0x0c, 0x01, 0x00, 0x00 + }; + copy_block(op_store_FD_FPR15_code, 24); + inc_code_ptr(24); +} +#endif + +DEFINE_GEN(gen_op_load_F0_FPR16,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F0_FPR16 +{ + static const uint8 op_load_F0_FPR16_code[] = { + 0x8d, 0x9d, 0x10, 0x01, 0x00, 0x00 + }; + copy_block(op_load_F0_FPR16_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F0_FPR16,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F0_FPR16 +{ + static const uint8 op_store_F0_FPR16_code[] = { + 0x8b, 0x03, 0x8b, 0x53, 0x04, 0x89, 0x85, 0x10, 0x01, 0x00, 0x00, 0x89, + 0x95, 0x14, 0x01, 0x00, 0x00 + }; + copy_block(op_store_F0_FPR16_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_load_F1_FPR16,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F1_FPR16 +{ + static const uint8 op_load_F1_FPR16_code[] = { + 0x8d, 0xb5, 0x10, 0x01, 0x00, 0x00 + }; + copy_block(op_load_F1_FPR16_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F1_FPR16,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F1_FPR16 +{ + static const uint8 op_store_F1_FPR16_code[] = { + 0x8b, 0x06, 0x8b, 0x56, 0x04, 0x89, 0x85, 0x10, 0x01, 0x00, 0x00, 0x89, + 0x95, 0x14, 0x01, 0x00, 0x00 + }; + copy_block(op_store_F1_FPR16_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_load_F2_FPR16,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F2_FPR16 +{ + static const uint8 op_load_F2_FPR16_code[] = { + 0x8d, 0xbd, 0x10, 0x01, 0x00, 0x00 + }; + copy_block(op_load_F2_FPR16_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F2_FPR16,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F2_FPR16 +{ + static const uint8 op_store_F2_FPR16_code[] = { + 0x8b, 0x07, 0x8b, 0x57, 0x04, 0x89, 0x85, 0x10, 0x01, 0x00, 0x00, 0x89, + 0x95, 0x14, 0x01, 0x00, 0x00 + }; + copy_block(op_store_F2_FPR16_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_store_FD_FPR16,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_FD_FPR16 +{ + static const uint8 op_store_FD_FPR16_code[] = { + 0x8b, 0x85, 0x40, 0x08, 0x0e, 0x00, 0x8b, 0x95, 0x44, 0x08, 0x0e, 0x00, + 0x89, 0x85, 0x10, 0x01, 0x00, 0x00, 0x89, 0x95, 0x14, 0x01, 0x00, 0x00 + }; + copy_block(op_store_FD_FPR16_code, 24); + inc_code_ptr(24); +} +#endif + +DEFINE_GEN(gen_op_load_F0_FPR17,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F0_FPR17 +{ + static const uint8 op_load_F0_FPR17_code[] = { + 0x8d, 0x9d, 0x18, 0x01, 0x00, 0x00 + }; + copy_block(op_load_F0_FPR17_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F0_FPR17,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F0_FPR17 +{ + static const uint8 op_store_F0_FPR17_code[] = { + 0x8b, 0x03, 0x8b, 0x53, 0x04, 0x89, 0x85, 0x18, 0x01, 0x00, 0x00, 0x89, + 0x95, 0x1c, 0x01, 0x00, 0x00 + }; + copy_block(op_store_F0_FPR17_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_load_F1_FPR17,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F1_FPR17 +{ + static const uint8 op_load_F1_FPR17_code[] = { + 0x8d, 0xb5, 0x18, 0x01, 0x00, 0x00 + }; + copy_block(op_load_F1_FPR17_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F1_FPR17,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F1_FPR17 +{ + static const uint8 op_store_F1_FPR17_code[] = { + 0x8b, 0x06, 0x8b, 0x56, 0x04, 0x89, 0x85, 0x18, 0x01, 0x00, 0x00, 0x89, + 0x95, 0x1c, 0x01, 0x00, 0x00 + }; + copy_block(op_store_F1_FPR17_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_load_F2_FPR17,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F2_FPR17 +{ + static const uint8 op_load_F2_FPR17_code[] = { + 0x8d, 0xbd, 0x18, 0x01, 0x00, 0x00 + }; + copy_block(op_load_F2_FPR17_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F2_FPR17,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F2_FPR17 +{ + static const uint8 op_store_F2_FPR17_code[] = { + 0x8b, 0x07, 0x8b, 0x57, 0x04, 0x89, 0x85, 0x18, 0x01, 0x00, 0x00, 0x89, + 0x95, 0x1c, 0x01, 0x00, 0x00 + }; + copy_block(op_store_F2_FPR17_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_store_FD_FPR17,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_FD_FPR17 +{ + static const uint8 op_store_FD_FPR17_code[] = { + 0x8b, 0x85, 0x40, 0x08, 0x0e, 0x00, 0x8b, 0x95, 0x44, 0x08, 0x0e, 0x00, + 0x89, 0x85, 0x18, 0x01, 0x00, 0x00, 0x89, 0x95, 0x1c, 0x01, 0x00, 0x00 + }; + copy_block(op_store_FD_FPR17_code, 24); + inc_code_ptr(24); +} +#endif + +DEFINE_GEN(gen_op_load_F0_FPR18,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F0_FPR18 +{ + static const uint8 op_load_F0_FPR18_code[] = { + 0x8d, 0x9d, 0x20, 0x01, 0x00, 0x00 + }; + copy_block(op_load_F0_FPR18_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F0_FPR18,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F0_FPR18 +{ + static const uint8 op_store_F0_FPR18_code[] = { + 0x8b, 0x03, 0x8b, 0x53, 0x04, 0x89, 0x85, 0x20, 0x01, 0x00, 0x00, 0x89, + 0x95, 0x24, 0x01, 0x00, 0x00 + }; + copy_block(op_store_F0_FPR18_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_load_F1_FPR18,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F1_FPR18 +{ + static const uint8 op_load_F1_FPR18_code[] = { + 0x8d, 0xb5, 0x20, 0x01, 0x00, 0x00 + }; + copy_block(op_load_F1_FPR18_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F1_FPR18,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F1_FPR18 +{ + static const uint8 op_store_F1_FPR18_code[] = { + 0x8b, 0x06, 0x8b, 0x56, 0x04, 0x89, 0x85, 0x20, 0x01, 0x00, 0x00, 0x89, + 0x95, 0x24, 0x01, 0x00, 0x00 + }; + copy_block(op_store_F1_FPR18_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_load_F2_FPR18,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F2_FPR18 +{ + static const uint8 op_load_F2_FPR18_code[] = { + 0x8d, 0xbd, 0x20, 0x01, 0x00, 0x00 + }; + copy_block(op_load_F2_FPR18_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F2_FPR18,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F2_FPR18 +{ + static const uint8 op_store_F2_FPR18_code[] = { + 0x8b, 0x07, 0x8b, 0x57, 0x04, 0x89, 0x85, 0x20, 0x01, 0x00, 0x00, 0x89, + 0x95, 0x24, 0x01, 0x00, 0x00 + }; + copy_block(op_store_F2_FPR18_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_store_FD_FPR18,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_FD_FPR18 +{ + static const uint8 op_store_FD_FPR18_code[] = { + 0x8b, 0x85, 0x40, 0x08, 0x0e, 0x00, 0x8b, 0x95, 0x44, 0x08, 0x0e, 0x00, + 0x89, 0x85, 0x20, 0x01, 0x00, 0x00, 0x89, 0x95, 0x24, 0x01, 0x00, 0x00 + }; + copy_block(op_store_FD_FPR18_code, 24); + inc_code_ptr(24); +} +#endif + +DEFINE_GEN(gen_op_load_F0_FPR19,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F0_FPR19 +{ + static const uint8 op_load_F0_FPR19_code[] = { + 0x8d, 0x9d, 0x28, 0x01, 0x00, 0x00 + }; + copy_block(op_load_F0_FPR19_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F0_FPR19,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F0_FPR19 +{ + static const uint8 op_store_F0_FPR19_code[] = { + 0x8b, 0x03, 0x8b, 0x53, 0x04, 0x89, 0x85, 0x28, 0x01, 0x00, 0x00, 0x89, + 0x95, 0x2c, 0x01, 0x00, 0x00 + }; + copy_block(op_store_F0_FPR19_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_load_F1_FPR19,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F1_FPR19 +{ + static const uint8 op_load_F1_FPR19_code[] = { + 0x8d, 0xb5, 0x28, 0x01, 0x00, 0x00 + }; + copy_block(op_load_F1_FPR19_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F1_FPR19,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F1_FPR19 +{ + static const uint8 op_store_F1_FPR19_code[] = { + 0x8b, 0x06, 0x8b, 0x56, 0x04, 0x89, 0x85, 0x28, 0x01, 0x00, 0x00, 0x89, + 0x95, 0x2c, 0x01, 0x00, 0x00 + }; + copy_block(op_store_F1_FPR19_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_load_F2_FPR19,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F2_FPR19 +{ + static const uint8 op_load_F2_FPR19_code[] = { + 0x8d, 0xbd, 0x28, 0x01, 0x00, 0x00 + }; + copy_block(op_load_F2_FPR19_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F2_FPR19,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F2_FPR19 +{ + static const uint8 op_store_F2_FPR19_code[] = { + 0x8b, 0x07, 0x8b, 0x57, 0x04, 0x89, 0x85, 0x28, 0x01, 0x00, 0x00, 0x89, + 0x95, 0x2c, 0x01, 0x00, 0x00 + }; + copy_block(op_store_F2_FPR19_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_store_FD_FPR19,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_FD_FPR19 +{ + static const uint8 op_store_FD_FPR19_code[] = { + 0x8b, 0x85, 0x40, 0x08, 0x0e, 0x00, 0x8b, 0x95, 0x44, 0x08, 0x0e, 0x00, + 0x89, 0x85, 0x28, 0x01, 0x00, 0x00, 0x89, 0x95, 0x2c, 0x01, 0x00, 0x00 + }; + copy_block(op_store_FD_FPR19_code, 24); + inc_code_ptr(24); +} +#endif + +DEFINE_GEN(gen_op_load_F0_FPR20,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F0_FPR20 +{ + static const uint8 op_load_F0_FPR20_code[] = { + 0x8d, 0x9d, 0x30, 0x01, 0x00, 0x00 + }; + copy_block(op_load_F0_FPR20_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F0_FPR20,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F0_FPR20 +{ + static const uint8 op_store_F0_FPR20_code[] = { + 0x8b, 0x03, 0x8b, 0x53, 0x04, 0x89, 0x85, 0x30, 0x01, 0x00, 0x00, 0x89, + 0x95, 0x34, 0x01, 0x00, 0x00 + }; + copy_block(op_store_F0_FPR20_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_load_F1_FPR20,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F1_FPR20 +{ + static const uint8 op_load_F1_FPR20_code[] = { + 0x8d, 0xb5, 0x30, 0x01, 0x00, 0x00 + }; + copy_block(op_load_F1_FPR20_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F1_FPR20,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F1_FPR20 +{ + static const uint8 op_store_F1_FPR20_code[] = { + 0x8b, 0x06, 0x8b, 0x56, 0x04, 0x89, 0x85, 0x30, 0x01, 0x00, 0x00, 0x89, + 0x95, 0x34, 0x01, 0x00, 0x00 + }; + copy_block(op_store_F1_FPR20_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_load_F2_FPR20,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F2_FPR20 +{ + static const uint8 op_load_F2_FPR20_code[] = { + 0x8d, 0xbd, 0x30, 0x01, 0x00, 0x00 + }; + copy_block(op_load_F2_FPR20_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F2_FPR20,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F2_FPR20 +{ + static const uint8 op_store_F2_FPR20_code[] = { + 0x8b, 0x07, 0x8b, 0x57, 0x04, 0x89, 0x85, 0x30, 0x01, 0x00, 0x00, 0x89, + 0x95, 0x34, 0x01, 0x00, 0x00 + }; + copy_block(op_store_F2_FPR20_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_store_FD_FPR20,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_FD_FPR20 +{ + static const uint8 op_store_FD_FPR20_code[] = { + 0x8b, 0x85, 0x40, 0x08, 0x0e, 0x00, 0x8b, 0x95, 0x44, 0x08, 0x0e, 0x00, + 0x89, 0x85, 0x30, 0x01, 0x00, 0x00, 0x89, 0x95, 0x34, 0x01, 0x00, 0x00 + }; + copy_block(op_store_FD_FPR20_code, 24); + inc_code_ptr(24); +} +#endif + +DEFINE_GEN(gen_op_load_F0_FPR21,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F0_FPR21 +{ + static const uint8 op_load_F0_FPR21_code[] = { + 0x8d, 0x9d, 0x38, 0x01, 0x00, 0x00 + }; + copy_block(op_load_F0_FPR21_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F0_FPR21,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F0_FPR21 +{ + static const uint8 op_store_F0_FPR21_code[] = { + 0x8b, 0x03, 0x8b, 0x53, 0x04, 0x89, 0x85, 0x38, 0x01, 0x00, 0x00, 0x89, + 0x95, 0x3c, 0x01, 0x00, 0x00 + }; + copy_block(op_store_F0_FPR21_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_load_F1_FPR21,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F1_FPR21 +{ + static const uint8 op_load_F1_FPR21_code[] = { + 0x8d, 0xb5, 0x38, 0x01, 0x00, 0x00 + }; + copy_block(op_load_F1_FPR21_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F1_FPR21,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F1_FPR21 +{ + static const uint8 op_store_F1_FPR21_code[] = { + 0x8b, 0x06, 0x8b, 0x56, 0x04, 0x89, 0x85, 0x38, 0x01, 0x00, 0x00, 0x89, + 0x95, 0x3c, 0x01, 0x00, 0x00 + }; + copy_block(op_store_F1_FPR21_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_load_F2_FPR21,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F2_FPR21 +{ + static const uint8 op_load_F2_FPR21_code[] = { + 0x8d, 0xbd, 0x38, 0x01, 0x00, 0x00 + }; + copy_block(op_load_F2_FPR21_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F2_FPR21,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F2_FPR21 +{ + static const uint8 op_store_F2_FPR21_code[] = { + 0x8b, 0x07, 0x8b, 0x57, 0x04, 0x89, 0x85, 0x38, 0x01, 0x00, 0x00, 0x89, + 0x95, 0x3c, 0x01, 0x00, 0x00 + }; + copy_block(op_store_F2_FPR21_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_store_FD_FPR21,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_FD_FPR21 +{ + static const uint8 op_store_FD_FPR21_code[] = { + 0x8b, 0x85, 0x40, 0x08, 0x0e, 0x00, 0x8b, 0x95, 0x44, 0x08, 0x0e, 0x00, + 0x89, 0x85, 0x38, 0x01, 0x00, 0x00, 0x89, 0x95, 0x3c, 0x01, 0x00, 0x00 + }; + copy_block(op_store_FD_FPR21_code, 24); + inc_code_ptr(24); +} +#endif + +DEFINE_GEN(gen_op_load_F0_FPR22,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F0_FPR22 +{ + static const uint8 op_load_F0_FPR22_code[] = { + 0x8d, 0x9d, 0x40, 0x01, 0x00, 0x00 + }; + copy_block(op_load_F0_FPR22_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F0_FPR22,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F0_FPR22 +{ + static const uint8 op_store_F0_FPR22_code[] = { + 0x8b, 0x03, 0x8b, 0x53, 0x04, 0x89, 0x85, 0x40, 0x01, 0x00, 0x00, 0x89, + 0x95, 0x44, 0x01, 0x00, 0x00 + }; + copy_block(op_store_F0_FPR22_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_load_F1_FPR22,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F1_FPR22 +{ + static const uint8 op_load_F1_FPR22_code[] = { + 0x8d, 0xb5, 0x40, 0x01, 0x00, 0x00 + }; + copy_block(op_load_F1_FPR22_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F1_FPR22,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F1_FPR22 +{ + static const uint8 op_store_F1_FPR22_code[] = { + 0x8b, 0x06, 0x8b, 0x56, 0x04, 0x89, 0x85, 0x40, 0x01, 0x00, 0x00, 0x89, + 0x95, 0x44, 0x01, 0x00, 0x00 + }; + copy_block(op_store_F1_FPR22_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_load_F2_FPR22,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F2_FPR22 +{ + static const uint8 op_load_F2_FPR22_code[] = { + 0x8d, 0xbd, 0x40, 0x01, 0x00, 0x00 + }; + copy_block(op_load_F2_FPR22_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F2_FPR22,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F2_FPR22 +{ + static const uint8 op_store_F2_FPR22_code[] = { + 0x8b, 0x07, 0x8b, 0x57, 0x04, 0x89, 0x85, 0x40, 0x01, 0x00, 0x00, 0x89, + 0x95, 0x44, 0x01, 0x00, 0x00 + }; + copy_block(op_store_F2_FPR22_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_store_FD_FPR22,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_FD_FPR22 +{ + static const uint8 op_store_FD_FPR22_code[] = { + 0x8b, 0x85, 0x40, 0x08, 0x0e, 0x00, 0x8b, 0x95, 0x44, 0x08, 0x0e, 0x00, + 0x89, 0x85, 0x40, 0x01, 0x00, 0x00, 0x89, 0x95, 0x44, 0x01, 0x00, 0x00 + }; + copy_block(op_store_FD_FPR22_code, 24); + inc_code_ptr(24); +} +#endif + +DEFINE_GEN(gen_op_load_F0_FPR23,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F0_FPR23 +{ + static const uint8 op_load_F0_FPR23_code[] = { + 0x8d, 0x9d, 0x48, 0x01, 0x00, 0x00 + }; + copy_block(op_load_F0_FPR23_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F0_FPR23,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F0_FPR23 +{ + static const uint8 op_store_F0_FPR23_code[] = { + 0x8b, 0x03, 0x8b, 0x53, 0x04, 0x89, 0x85, 0x48, 0x01, 0x00, 0x00, 0x89, + 0x95, 0x4c, 0x01, 0x00, 0x00 + }; + copy_block(op_store_F0_FPR23_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_load_F1_FPR23,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F1_FPR23 +{ + static const uint8 op_load_F1_FPR23_code[] = { + 0x8d, 0xb5, 0x48, 0x01, 0x00, 0x00 + }; + copy_block(op_load_F1_FPR23_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F1_FPR23,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F1_FPR23 +{ + static const uint8 op_store_F1_FPR23_code[] = { + 0x8b, 0x06, 0x8b, 0x56, 0x04, 0x89, 0x85, 0x48, 0x01, 0x00, 0x00, 0x89, + 0x95, 0x4c, 0x01, 0x00, 0x00 + }; + copy_block(op_store_F1_FPR23_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_load_F2_FPR23,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F2_FPR23 +{ + static const uint8 op_load_F2_FPR23_code[] = { + 0x8d, 0xbd, 0x48, 0x01, 0x00, 0x00 + }; + copy_block(op_load_F2_FPR23_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F2_FPR23,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F2_FPR23 +{ + static const uint8 op_store_F2_FPR23_code[] = { + 0x8b, 0x07, 0x8b, 0x57, 0x04, 0x89, 0x85, 0x48, 0x01, 0x00, 0x00, 0x89, + 0x95, 0x4c, 0x01, 0x00, 0x00 + }; + copy_block(op_store_F2_FPR23_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_store_FD_FPR23,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_FD_FPR23 +{ + static const uint8 op_store_FD_FPR23_code[] = { + 0x8b, 0x85, 0x40, 0x08, 0x0e, 0x00, 0x8b, 0x95, 0x44, 0x08, 0x0e, 0x00, + 0x89, 0x85, 0x48, 0x01, 0x00, 0x00, 0x89, 0x95, 0x4c, 0x01, 0x00, 0x00 + }; + copy_block(op_store_FD_FPR23_code, 24); + inc_code_ptr(24); +} +#endif + +DEFINE_GEN(gen_op_load_F0_FPR24,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F0_FPR24 +{ + static const uint8 op_load_F0_FPR24_code[] = { + 0x8d, 0x9d, 0x50, 0x01, 0x00, 0x00 + }; + copy_block(op_load_F0_FPR24_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F0_FPR24,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F0_FPR24 +{ + static const uint8 op_store_F0_FPR24_code[] = { + 0x8b, 0x03, 0x8b, 0x53, 0x04, 0x89, 0x85, 0x50, 0x01, 0x00, 0x00, 0x89, + 0x95, 0x54, 0x01, 0x00, 0x00 + }; + copy_block(op_store_F0_FPR24_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_load_F1_FPR24,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F1_FPR24 +{ + static const uint8 op_load_F1_FPR24_code[] = { + 0x8d, 0xb5, 0x50, 0x01, 0x00, 0x00 + }; + copy_block(op_load_F1_FPR24_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F1_FPR24,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F1_FPR24 +{ + static const uint8 op_store_F1_FPR24_code[] = { + 0x8b, 0x06, 0x8b, 0x56, 0x04, 0x89, 0x85, 0x50, 0x01, 0x00, 0x00, 0x89, + 0x95, 0x54, 0x01, 0x00, 0x00 + }; + copy_block(op_store_F1_FPR24_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_load_F2_FPR24,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F2_FPR24 +{ + static const uint8 op_load_F2_FPR24_code[] = { + 0x8d, 0xbd, 0x50, 0x01, 0x00, 0x00 + }; + copy_block(op_load_F2_FPR24_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F2_FPR24,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F2_FPR24 +{ + static const uint8 op_store_F2_FPR24_code[] = { + 0x8b, 0x07, 0x8b, 0x57, 0x04, 0x89, 0x85, 0x50, 0x01, 0x00, 0x00, 0x89, + 0x95, 0x54, 0x01, 0x00, 0x00 + }; + copy_block(op_store_F2_FPR24_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_store_FD_FPR24,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_FD_FPR24 +{ + static const uint8 op_store_FD_FPR24_code[] = { + 0x8b, 0x85, 0x40, 0x08, 0x0e, 0x00, 0x8b, 0x95, 0x44, 0x08, 0x0e, 0x00, + 0x89, 0x85, 0x50, 0x01, 0x00, 0x00, 0x89, 0x95, 0x54, 0x01, 0x00, 0x00 + }; + copy_block(op_store_FD_FPR24_code, 24); + inc_code_ptr(24); +} +#endif + +DEFINE_GEN(gen_op_load_F0_FPR25,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F0_FPR25 +{ + static const uint8 op_load_F0_FPR25_code[] = { + 0x8d, 0x9d, 0x58, 0x01, 0x00, 0x00 + }; + copy_block(op_load_F0_FPR25_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F0_FPR25,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F0_FPR25 +{ + static const uint8 op_store_F0_FPR25_code[] = { + 0x8b, 0x03, 0x8b, 0x53, 0x04, 0x89, 0x85, 0x58, 0x01, 0x00, 0x00, 0x89, + 0x95, 0x5c, 0x01, 0x00, 0x00 + }; + copy_block(op_store_F0_FPR25_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_load_F1_FPR25,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F1_FPR25 +{ + static const uint8 op_load_F1_FPR25_code[] = { + 0x8d, 0xb5, 0x58, 0x01, 0x00, 0x00 + }; + copy_block(op_load_F1_FPR25_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F1_FPR25,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F1_FPR25 +{ + static const uint8 op_store_F1_FPR25_code[] = { + 0x8b, 0x06, 0x8b, 0x56, 0x04, 0x89, 0x85, 0x58, 0x01, 0x00, 0x00, 0x89, + 0x95, 0x5c, 0x01, 0x00, 0x00 + }; + copy_block(op_store_F1_FPR25_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_load_F2_FPR25,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F2_FPR25 +{ + static const uint8 op_load_F2_FPR25_code[] = { + 0x8d, 0xbd, 0x58, 0x01, 0x00, 0x00 + }; + copy_block(op_load_F2_FPR25_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F2_FPR25,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F2_FPR25 +{ + static const uint8 op_store_F2_FPR25_code[] = { + 0x8b, 0x07, 0x8b, 0x57, 0x04, 0x89, 0x85, 0x58, 0x01, 0x00, 0x00, 0x89, + 0x95, 0x5c, 0x01, 0x00, 0x00 + }; + copy_block(op_store_F2_FPR25_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_store_FD_FPR25,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_FD_FPR25 +{ + static const uint8 op_store_FD_FPR25_code[] = { + 0x8b, 0x85, 0x40, 0x08, 0x0e, 0x00, 0x8b, 0x95, 0x44, 0x08, 0x0e, 0x00, + 0x89, 0x85, 0x58, 0x01, 0x00, 0x00, 0x89, 0x95, 0x5c, 0x01, 0x00, 0x00 + }; + copy_block(op_store_FD_FPR25_code, 24); + inc_code_ptr(24); +} +#endif + +DEFINE_GEN(gen_op_load_F0_FPR26,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F0_FPR26 +{ + static const uint8 op_load_F0_FPR26_code[] = { + 0x8d, 0x9d, 0x60, 0x01, 0x00, 0x00 + }; + copy_block(op_load_F0_FPR26_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F0_FPR26,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F0_FPR26 +{ + static const uint8 op_store_F0_FPR26_code[] = { + 0x8b, 0x03, 0x8b, 0x53, 0x04, 0x89, 0x85, 0x60, 0x01, 0x00, 0x00, 0x89, + 0x95, 0x64, 0x01, 0x00, 0x00 + }; + copy_block(op_store_F0_FPR26_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_load_F1_FPR26,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F1_FPR26 +{ + static const uint8 op_load_F1_FPR26_code[] = { + 0x8d, 0xb5, 0x60, 0x01, 0x00, 0x00 + }; + copy_block(op_load_F1_FPR26_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F1_FPR26,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F1_FPR26 +{ + static const uint8 op_store_F1_FPR26_code[] = { + 0x8b, 0x06, 0x8b, 0x56, 0x04, 0x89, 0x85, 0x60, 0x01, 0x00, 0x00, 0x89, + 0x95, 0x64, 0x01, 0x00, 0x00 + }; + copy_block(op_store_F1_FPR26_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_load_F2_FPR26,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F2_FPR26 +{ + static const uint8 op_load_F2_FPR26_code[] = { + 0x8d, 0xbd, 0x60, 0x01, 0x00, 0x00 + }; + copy_block(op_load_F2_FPR26_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F2_FPR26,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F2_FPR26 +{ + static const uint8 op_store_F2_FPR26_code[] = { + 0x8b, 0x07, 0x8b, 0x57, 0x04, 0x89, 0x85, 0x60, 0x01, 0x00, 0x00, 0x89, + 0x95, 0x64, 0x01, 0x00, 0x00 + }; + copy_block(op_store_F2_FPR26_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_store_FD_FPR26,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_FD_FPR26 +{ + static const uint8 op_store_FD_FPR26_code[] = { + 0x8b, 0x85, 0x40, 0x08, 0x0e, 0x00, 0x8b, 0x95, 0x44, 0x08, 0x0e, 0x00, + 0x89, 0x85, 0x60, 0x01, 0x00, 0x00, 0x89, 0x95, 0x64, 0x01, 0x00, 0x00 + }; + copy_block(op_store_FD_FPR26_code, 24); + inc_code_ptr(24); +} +#endif + +DEFINE_GEN(gen_op_load_F0_FPR27,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F0_FPR27 +{ + static const uint8 op_load_F0_FPR27_code[] = { + 0x8d, 0x9d, 0x68, 0x01, 0x00, 0x00 + }; + copy_block(op_load_F0_FPR27_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F0_FPR27,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F0_FPR27 +{ + static const uint8 op_store_F0_FPR27_code[] = { + 0x8b, 0x03, 0x8b, 0x53, 0x04, 0x89, 0x85, 0x68, 0x01, 0x00, 0x00, 0x89, + 0x95, 0x6c, 0x01, 0x00, 0x00 + }; + copy_block(op_store_F0_FPR27_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_load_F1_FPR27,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F1_FPR27 +{ + static const uint8 op_load_F1_FPR27_code[] = { + 0x8d, 0xb5, 0x68, 0x01, 0x00, 0x00 + }; + copy_block(op_load_F1_FPR27_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F1_FPR27,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F1_FPR27 +{ + static const uint8 op_store_F1_FPR27_code[] = { + 0x8b, 0x06, 0x8b, 0x56, 0x04, 0x89, 0x85, 0x68, 0x01, 0x00, 0x00, 0x89, + 0x95, 0x6c, 0x01, 0x00, 0x00 + }; + copy_block(op_store_F1_FPR27_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_load_F2_FPR27,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F2_FPR27 +{ + static const uint8 op_load_F2_FPR27_code[] = { + 0x8d, 0xbd, 0x68, 0x01, 0x00, 0x00 + }; + copy_block(op_load_F2_FPR27_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F2_FPR27,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F2_FPR27 +{ + static const uint8 op_store_F2_FPR27_code[] = { + 0x8b, 0x07, 0x8b, 0x57, 0x04, 0x89, 0x85, 0x68, 0x01, 0x00, 0x00, 0x89, + 0x95, 0x6c, 0x01, 0x00, 0x00 + }; + copy_block(op_store_F2_FPR27_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_store_FD_FPR27,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_FD_FPR27 +{ + static const uint8 op_store_FD_FPR27_code[] = { + 0x8b, 0x85, 0x40, 0x08, 0x0e, 0x00, 0x8b, 0x95, 0x44, 0x08, 0x0e, 0x00, + 0x89, 0x85, 0x68, 0x01, 0x00, 0x00, 0x89, 0x95, 0x6c, 0x01, 0x00, 0x00 + }; + copy_block(op_store_FD_FPR27_code, 24); + inc_code_ptr(24); +} +#endif + +DEFINE_GEN(gen_op_load_F0_FPR28,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F0_FPR28 +{ + static const uint8 op_load_F0_FPR28_code[] = { + 0x8d, 0x9d, 0x70, 0x01, 0x00, 0x00 + }; + copy_block(op_load_F0_FPR28_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F0_FPR28,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F0_FPR28 +{ + static const uint8 op_store_F0_FPR28_code[] = { + 0x8b, 0x03, 0x8b, 0x53, 0x04, 0x89, 0x85, 0x70, 0x01, 0x00, 0x00, 0x89, + 0x95, 0x74, 0x01, 0x00, 0x00 + }; + copy_block(op_store_F0_FPR28_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_load_F1_FPR28,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F1_FPR28 +{ + static const uint8 op_load_F1_FPR28_code[] = { + 0x8d, 0xb5, 0x70, 0x01, 0x00, 0x00 + }; + copy_block(op_load_F1_FPR28_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F1_FPR28,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F1_FPR28 +{ + static const uint8 op_store_F1_FPR28_code[] = { + 0x8b, 0x06, 0x8b, 0x56, 0x04, 0x89, 0x85, 0x70, 0x01, 0x00, 0x00, 0x89, + 0x95, 0x74, 0x01, 0x00, 0x00 + }; + copy_block(op_store_F1_FPR28_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_load_F2_FPR28,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F2_FPR28 +{ + static const uint8 op_load_F2_FPR28_code[] = { + 0x8d, 0xbd, 0x70, 0x01, 0x00, 0x00 + }; + copy_block(op_load_F2_FPR28_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F2_FPR28,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F2_FPR28 +{ + static const uint8 op_store_F2_FPR28_code[] = { + 0x8b, 0x07, 0x8b, 0x57, 0x04, 0x89, 0x85, 0x70, 0x01, 0x00, 0x00, 0x89, + 0x95, 0x74, 0x01, 0x00, 0x00 + }; + copy_block(op_store_F2_FPR28_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_store_FD_FPR28,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_FD_FPR28 +{ + static const uint8 op_store_FD_FPR28_code[] = { + 0x8b, 0x85, 0x40, 0x08, 0x0e, 0x00, 0x8b, 0x95, 0x44, 0x08, 0x0e, 0x00, + 0x89, 0x85, 0x70, 0x01, 0x00, 0x00, 0x89, 0x95, 0x74, 0x01, 0x00, 0x00 + }; + copy_block(op_store_FD_FPR28_code, 24); + inc_code_ptr(24); +} +#endif + +DEFINE_GEN(gen_op_load_F0_FPR29,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F0_FPR29 +{ + static const uint8 op_load_F0_FPR29_code[] = { + 0x8d, 0x9d, 0x78, 0x01, 0x00, 0x00 + }; + copy_block(op_load_F0_FPR29_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F0_FPR29,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F0_FPR29 +{ + static const uint8 op_store_F0_FPR29_code[] = { + 0x8b, 0x03, 0x8b, 0x53, 0x04, 0x89, 0x85, 0x78, 0x01, 0x00, 0x00, 0x89, + 0x95, 0x7c, 0x01, 0x00, 0x00 + }; + copy_block(op_store_F0_FPR29_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_load_F1_FPR29,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F1_FPR29 +{ + static const uint8 op_load_F1_FPR29_code[] = { + 0x8d, 0xb5, 0x78, 0x01, 0x00, 0x00 + }; + copy_block(op_load_F1_FPR29_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F1_FPR29,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F1_FPR29 +{ + static const uint8 op_store_F1_FPR29_code[] = { + 0x8b, 0x06, 0x8b, 0x56, 0x04, 0x89, 0x85, 0x78, 0x01, 0x00, 0x00, 0x89, + 0x95, 0x7c, 0x01, 0x00, 0x00 + }; + copy_block(op_store_F1_FPR29_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_load_F2_FPR29,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F2_FPR29 +{ + static const uint8 op_load_F2_FPR29_code[] = { + 0x8d, 0xbd, 0x78, 0x01, 0x00, 0x00 + }; + copy_block(op_load_F2_FPR29_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F2_FPR29,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F2_FPR29 +{ + static const uint8 op_store_F2_FPR29_code[] = { + 0x8b, 0x07, 0x8b, 0x57, 0x04, 0x89, 0x85, 0x78, 0x01, 0x00, 0x00, 0x89, + 0x95, 0x7c, 0x01, 0x00, 0x00 + }; + copy_block(op_store_F2_FPR29_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_store_FD_FPR29,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_FD_FPR29 +{ + static const uint8 op_store_FD_FPR29_code[] = { + 0x8b, 0x85, 0x40, 0x08, 0x0e, 0x00, 0x8b, 0x95, 0x44, 0x08, 0x0e, 0x00, + 0x89, 0x85, 0x78, 0x01, 0x00, 0x00, 0x89, 0x95, 0x7c, 0x01, 0x00, 0x00 + }; + copy_block(op_store_FD_FPR29_code, 24); + inc_code_ptr(24); +} +#endif + +DEFINE_GEN(gen_op_load_F0_FPR30,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F0_FPR30 +{ + static const uint8 op_load_F0_FPR30_code[] = { + 0x8d, 0x9d, 0x80, 0x01, 0x00, 0x00 + }; + copy_block(op_load_F0_FPR30_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F0_FPR30,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F0_FPR30 +{ + static const uint8 op_store_F0_FPR30_code[] = { + 0x8b, 0x03, 0x8b, 0x53, 0x04, 0x89, 0x85, 0x80, 0x01, 0x00, 0x00, 0x89, + 0x95, 0x84, 0x01, 0x00, 0x00 + }; + copy_block(op_store_F0_FPR30_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_load_F1_FPR30,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F1_FPR30 +{ + static const uint8 op_load_F1_FPR30_code[] = { + 0x8d, 0xb5, 0x80, 0x01, 0x00, 0x00 + }; + copy_block(op_load_F1_FPR30_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F1_FPR30,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F1_FPR30 +{ + static const uint8 op_store_F1_FPR30_code[] = { + 0x8b, 0x06, 0x8b, 0x56, 0x04, 0x89, 0x85, 0x80, 0x01, 0x00, 0x00, 0x89, + 0x95, 0x84, 0x01, 0x00, 0x00 + }; + copy_block(op_store_F1_FPR30_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_load_F2_FPR30,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F2_FPR30 +{ + static const uint8 op_load_F2_FPR30_code[] = { + 0x8d, 0xbd, 0x80, 0x01, 0x00, 0x00 + }; + copy_block(op_load_F2_FPR30_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F2_FPR30,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F2_FPR30 +{ + static const uint8 op_store_F2_FPR30_code[] = { + 0x8b, 0x07, 0x8b, 0x57, 0x04, 0x89, 0x85, 0x80, 0x01, 0x00, 0x00, 0x89, + 0x95, 0x84, 0x01, 0x00, 0x00 + }; + copy_block(op_store_F2_FPR30_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_store_FD_FPR30,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_FD_FPR30 +{ + static const uint8 op_store_FD_FPR30_code[] = { + 0x8b, 0x85, 0x40, 0x08, 0x0e, 0x00, 0x8b, 0x95, 0x44, 0x08, 0x0e, 0x00, + 0x89, 0x85, 0x80, 0x01, 0x00, 0x00, 0x89, 0x95, 0x84, 0x01, 0x00, 0x00 + }; + copy_block(op_store_FD_FPR30_code, 24); + inc_code_ptr(24); +} +#endif + +DEFINE_GEN(gen_op_load_F0_FPR31,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F0_FPR31 +{ + static const uint8 op_load_F0_FPR31_code[] = { + 0x8d, 0x9d, 0x88, 0x01, 0x00, 0x00 + }; + copy_block(op_load_F0_FPR31_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F0_FPR31,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F0_FPR31 +{ + static const uint8 op_store_F0_FPR31_code[] = { + 0x8b, 0x03, 0x8b, 0x53, 0x04, 0x89, 0x85, 0x88, 0x01, 0x00, 0x00, 0x89, + 0x95, 0x8c, 0x01, 0x00, 0x00 + }; + copy_block(op_store_F0_FPR31_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_load_F1_FPR31,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F1_FPR31 +{ + static const uint8 op_load_F1_FPR31_code[] = { + 0x8d, 0xb5, 0x88, 0x01, 0x00, 0x00 + }; + copy_block(op_load_F1_FPR31_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F1_FPR31,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F1_FPR31 +{ + static const uint8 op_store_F1_FPR31_code[] = { + 0x8b, 0x06, 0x8b, 0x56, 0x04, 0x89, 0x85, 0x88, 0x01, 0x00, 0x00, 0x89, + 0x95, 0x8c, 0x01, 0x00, 0x00 + }; + copy_block(op_store_F1_FPR31_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_load_F2_FPR31,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_F2_FPR31 +{ + static const uint8 op_load_F2_FPR31_code[] = { + 0x8d, 0xbd, 0x88, 0x01, 0x00, 0x00 + }; + copy_block(op_load_F2_FPR31_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_F2_FPR31,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_F2_FPR31 +{ + static const uint8 op_store_F2_FPR31_code[] = { + 0x8b, 0x07, 0x8b, 0x57, 0x04, 0x89, 0x85, 0x88, 0x01, 0x00, 0x00, 0x89, + 0x95, 0x8c, 0x01, 0x00, 0x00 + }; + copy_block(op_store_F2_FPR31_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_store_FD_FPR31,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_FD_FPR31 +{ + static const uint8 op_store_FD_FPR31_code[] = { + 0x8b, 0x85, 0x40, 0x08, 0x0e, 0x00, 0x8b, 0x95, 0x44, 0x08, 0x0e, 0x00, + 0x89, 0x85, 0x88, 0x01, 0x00, 0x00, 0x89, 0x95, 0x8c, 0x01, 0x00, 0x00 + }; + copy_block(op_store_FD_FPR31_code, 24); + inc_code_ptr(24); +} +#endif + +DEFINE_GEN(gen_op_load_double_FD_T1_0,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_double_FD_T1_0 +{ + static const uint8 op_load_double_FD_T1_0_code[] = { + 0x8d, 0x85, 0x40, 0x08, 0x0e, 0x00, 0x8b, 0x96, 0x00, 0x00, 0x00, 0x11, + 0x0f, 0xca, 0x89, 0x50, 0x04, 0x8b, 0x96, 0x04, 0x00, 0x00, 0x11, 0x0f, + 0xca, 0x89, 0x10 + }; + copy_block(op_load_double_FD_T1_0_code, 27); + inc_code_ptr(27); +} +#endif + +DEFINE_GEN(gen_op_load_single_FD_T1_0,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_single_FD_T1_0 +{ + static const uint8 op_load_single_FD_T1_0_code[] = { + 0x83, 0xec, 0x08, 0x8d, 0x85, 0x40, 0x08, 0x0e, 0x00, 0x8b, 0x96, 0x00, + 0x00, 0x00, 0x11, 0x0f, 0xca, 0x89, 0x14, 0x24, 0x31, 0xc9, 0xd9, 0x04, + 0x24, 0x89, 0x4c, 0x24, 0x04, 0xdd, 0x1c, 0x24, 0x8b, 0x14, 0x24, 0x8b, + 0x4c, 0x24, 0x04, 0x89, 0x10, 0x89, 0x48, 0x04, 0x83, 0xc4, 0x08 + }; + copy_block(op_load_single_FD_T1_0_code, 47); + inc_code_ptr(47); +} +#endif + +DEFINE_GEN(gen_op_store_double_F0_T1_0,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_double_F0_T1_0 +{ + static const uint8 op_store_double_F0_T1_0_code[] = { + 0x8b, 0x43, 0x04, 0x0f, 0xc8, 0x89, 0x86, 0x00, 0x00, 0x00, 0x11, 0x8d, + 0x56, 0x04, 0x8b, 0x03, 0x0f, 0xc8, 0x89, 0x82, 0x00, 0x00, 0x00, 0x11 + }; + copy_block(op_store_double_F0_T1_0_code, 24); + inc_code_ptr(24); +} +#endif + +DEFINE_GEN(gen_op_store_single_F0_T1_0,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_single_F0_T1_0 +{ + static const uint8 op_store_single_F0_T1_0_code[] = { + 0x83, 0xec, 0x18, 0x89, 0xf1, 0x8b, 0x03, 0x8b, 0x53, 0x04, 0x89, 0x44, + 0x24, 0x0c, 0x89, 0xd0, 0xc1, 0xe8, 0x14, 0x89, 0x54, 0x24, 0x10, 0x25, + 0xff, 0x07, 0x00, 0x00, 0x2d, 0x6a, 0x03, 0x00, 0x00, 0x83, 0xf8, 0x16, + 0x76, 0x3a, 0x8b, 0x54, 0x24, 0x10, 0x89, 0xd0, 0x25, 0x00, 0x00, 0x00, + 0xc0, 0x89, 0x04, 0x24, 0x8b, 0x54, 0x24, 0x10, 0x8b, 0x44, 0x24, 0x0c, + 0x0f, 0xac, 0xd0, 0x1d, 0xc1, 0xea, 0x1d, 0x89, 0x44, 0x24, 0x0c, 0x8b, + 0x44, 0x24, 0x0c, 0x89, 0x54, 0x24, 0x10, 0x25, 0xff, 0xff, 0xff, 0x3f, + 0x09, 0x04, 0x24, 0xeb, 0x26, 0x8d, 0xb4, 0x26, 0x00, 0x00, 0x00, 0x00, + 0x8b, 0x44, 0x24, 0x0c, 0x8b, 0x54, 0x24, 0x10, 0x89, 0x44, 0x24, 0x04, + 0x89, 0x54, 0x24, 0x08, 0xdd, 0x44, 0x24, 0x04, 0xd9, 0x5c, 0x24, 0x14, + 0x8b, 0x44, 0x24, 0x14, 0x89, 0x04, 0x24, 0x8b, 0x04, 0x24, 0x0f, 0xc8, + 0x89, 0x81, 0x00, 0x00, 0x00, 0x11, 0x83, 0xc4, 0x18 + }; + copy_block(op_store_single_F0_T1_0_code, 141); + inc_code_ptr(141); +} +#endif + +DEFINE_GEN(gen_op_load_double_FD_T1_im,void,(long param1)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_double_FD_T1_im +{ + static const uint8 op_load_double_FD_T1_im_code[] = { + 0x8d, 0x85, 0x40, 0x08, 0x0e, 0x00, 0x8b, 0x96, 0x00, 0x00, 0x00, 0x11, + 0x0f, 0xca, 0x89, 0x50, 0x04, 0x8b, 0x96, 0x04, 0x00, 0x00, 0x11, 0x0f, + 0xca, 0x89, 0x10 + }; + copy_block(op_load_double_FD_T1_im_code, 27); + *(uint32_t *)(code_ptr() + 8) = param1 + 285212672; + *(uint32_t *)(code_ptr() + 19) = param1 + 285212676; + inc_code_ptr(27); +} +#endif + +DEFINE_GEN(gen_op_load_single_FD_T1_im,void,(long param1)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_single_FD_T1_im +{ + static const uint8 op_load_single_FD_T1_im_code[] = { + 0x83, 0xec, 0x08, 0x8d, 0x85, 0x40, 0x08, 0x0e, 0x00, 0x8b, 0x96, 0x00, + 0x00, 0x00, 0x11, 0x0f, 0xca, 0x89, 0x14, 0x24, 0x31, 0xc9, 0xd9, 0x04, + 0x24, 0x89, 0x4c, 0x24, 0x04, 0xdd, 0x1c, 0x24, 0x8b, 0x14, 0x24, 0x8b, + 0x4c, 0x24, 0x04, 0x89, 0x10, 0x89, 0x48, 0x04, 0x83, 0xc4, 0x08 + }; + copy_block(op_load_single_FD_T1_im_code, 47); + *(uint32_t *)(code_ptr() + 11) = param1 + 285212672; + inc_code_ptr(47); +} +#endif + +DEFINE_GEN(gen_op_store_double_F0_T1_im,void,(long param1)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_double_F0_T1_im +{ + static const uint8 op_store_double_F0_T1_im_code[] = { + 0x8d, 0x96, 0x00, 0x00, 0x00, 0x00, 0x8b, 0x43, 0x04, 0x0f, 0xc8, 0x89, + 0x82, 0x00, 0x00, 0x00, 0x11, 0x8b, 0x03, 0x8d, 0x96, 0x04, 0x00, 0x00, + 0x00, 0x0f, 0xc8, 0x89, 0x82, 0x00, 0x00, 0x00, 0x11 + }; + copy_block(op_store_double_F0_T1_im_code, 33); + *(uint32_t *)(code_ptr() + 2) = param1 + 0; + *(uint32_t *)(code_ptr() + 21) = param1 + 4; + inc_code_ptr(33); +} +#endif + +DEFINE_GEN(gen_op_store_single_F0_T1_im,void,(long param1)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_single_F0_T1_im +{ + static const uint8 op_store_single_F0_T1_im_code[] = { + 0x83, 0xec, 0x18, 0x8d, 0x8e, 0x00, 0x00, 0x00, 0x00, 0x8b, 0x03, 0x8b, + 0x53, 0x04, 0x89, 0x44, 0x24, 0x0c, 0x89, 0xd0, 0xc1, 0xe8, 0x14, 0x89, + 0x54, 0x24, 0x10, 0x25, 0xff, 0x07, 0x00, 0x00, 0x2d, 0x6a, 0x03, 0x00, + 0x00, 0x83, 0xf8, 0x16, 0x76, 0x36, 0x8b, 0x54, 0x24, 0x10, 0x89, 0xd0, + 0x25, 0x00, 0x00, 0x00, 0xc0, 0x89, 0x04, 0x24, 0x8b, 0x54, 0x24, 0x10, + 0x8b, 0x44, 0x24, 0x0c, 0x0f, 0xac, 0xd0, 0x1d, 0xc1, 0xea, 0x1d, 0x89, + 0x44, 0x24, 0x0c, 0x8b, 0x44, 0x24, 0x0c, 0x89, 0x54, 0x24, 0x10, 0x25, + 0xff, 0xff, 0xff, 0x3f, 0x09, 0x04, 0x24, 0xeb, 0x22, 0x8d, 0x76, 0x00, + 0x8b, 0x44, 0x24, 0x0c, 0x8b, 0x54, 0x24, 0x10, 0x89, 0x44, 0x24, 0x04, + 0x89, 0x54, 0x24, 0x08, 0xdd, 0x44, 0x24, 0x04, 0xd9, 0x5c, 0x24, 0x14, + 0x8b, 0x44, 0x24, 0x14, 0x89, 0x04, 0x24, 0x8b, 0x04, 0x24, 0x0f, 0xc8, + 0x89, 0x81, 0x00, 0x00, 0x00, 0x11, 0x83, 0xc4, 0x18 + }; + copy_block(op_store_single_F0_T1_im_code, 141); + *(uint32_t *)(code_ptr() + 5) = param1 + 0; + inc_code_ptr(141); +} +#endif + +DEFINE_GEN(gen_op_load_double_FD_T1_T2,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_double_FD_T1_T2 +{ + static const uint8 op_load_double_FD_T1_T2_code[] = { + 0x8d, 0x85, 0x40, 0x08, 0x0e, 0x00, 0x8b, 0x94, 0x3e, 0x00, 0x00, 0x00, + 0x11, 0x0f, 0xca, 0x89, 0x50, 0x04, 0x8b, 0x94, 0x3e, 0x04, 0x00, 0x00, + 0x11, 0x0f, 0xca, 0x89, 0x10 + }; + copy_block(op_load_double_FD_T1_T2_code, 29); + inc_code_ptr(29); +} +#endif + +DEFINE_GEN(gen_op_load_single_FD_T1_T2,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_single_FD_T1_T2 +{ + static const uint8 op_load_single_FD_T1_T2_code[] = { + 0x83, 0xec, 0x08, 0x8d, 0x85, 0x40, 0x08, 0x0e, 0x00, 0x8b, 0x94, 0x3e, + 0x00, 0x00, 0x00, 0x11, 0x0f, 0xca, 0x89, 0x14, 0x24, 0x31, 0xc9, 0xd9, + 0x04, 0x24, 0x89, 0x4c, 0x24, 0x04, 0xdd, 0x1c, 0x24, 0x8b, 0x14, 0x24, + 0x8b, 0x4c, 0x24, 0x04, 0x89, 0x10, 0x89, 0x48, 0x04, 0x83, 0xc4, 0x08 + }; + copy_block(op_load_single_FD_T1_T2_code, 48); + inc_code_ptr(48); +} +#endif + +DEFINE_GEN(gen_op_store_double_F0_T1_T2,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_double_F0_T1_T2 +{ + static const uint8 op_store_double_F0_T1_T2_code[] = { + 0x8d, 0x14, 0x3e, 0x8b, 0x43, 0x04, 0x0f, 0xc8, 0x89, 0x82, 0x00, 0x00, + 0x00, 0x11, 0x8b, 0x03, 0x0f, 0xc8, 0x89, 0x82, 0x04, 0x00, 0x00, 0x11 + }; + copy_block(op_store_double_F0_T1_T2_code, 24); + inc_code_ptr(24); +} +#endif + +DEFINE_GEN(gen_op_store_single_F0_T1_T2,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_single_F0_T1_T2 +{ + static const uint8 op_store_single_F0_T1_T2_code[] = { + 0x83, 0xec, 0x18, 0x8d, 0x0c, 0x3e, 0x8b, 0x03, 0x8b, 0x53, 0x04, 0x89, + 0x44, 0x24, 0x0c, 0x89, 0xd0, 0xc1, 0xe8, 0x14, 0x89, 0x54, 0x24, 0x10, + 0x25, 0xff, 0x07, 0x00, 0x00, 0x2d, 0x6a, 0x03, 0x00, 0x00, 0x83, 0xf8, + 0x16, 0x76, 0x39, 0x8b, 0x54, 0x24, 0x10, 0x89, 0xd0, 0x25, 0x00, 0x00, + 0x00, 0xc0, 0x89, 0x04, 0x24, 0x8b, 0x54, 0x24, 0x10, 0x8b, 0x44, 0x24, + 0x0c, 0x0f, 0xac, 0xd0, 0x1d, 0xc1, 0xea, 0x1d, 0x89, 0x44, 0x24, 0x0c, + 0x8b, 0x44, 0x24, 0x0c, 0x89, 0x54, 0x24, 0x10, 0x25, 0xff, 0xff, 0xff, + 0x3f, 0x09, 0x04, 0x24, 0xeb, 0x25, 0x8d, 0xb6, 0x00, 0x00, 0x00, 0x00, + 0x8b, 0x44, 0x24, 0x0c, 0x8b, 0x54, 0x24, 0x10, 0x89, 0x44, 0x24, 0x04, + 0x89, 0x54, 0x24, 0x08, 0xdd, 0x44, 0x24, 0x04, 0xd9, 0x5c, 0x24, 0x14, + 0x8b, 0x44, 0x24, 0x14, 0x89, 0x04, 0x24, 0x8b, 0x04, 0x24, 0x0f, 0xc8, + 0x89, 0x81, 0x00, 0x00, 0x00, 0x11, 0x83, 0xc4, 0x18 + }; + copy_block(op_store_single_F0_T1_T2_code, 141); + inc_code_ptr(141); +} +#endif + +DEFINE_GEN(gen_op_lwarx_T0_T1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_lwarx_T0_T1 +{ + static const uint8 op_lwarx_T0_T1_code[] = { + 0x8b, 0x86, 0x00, 0x00, 0x00, 0x11, 0x89, 0xc3, 0x0f, 0xcb, 0x89, 0xb5, + 0xbc, 0x03, 0x00, 0x00, 0xb8, 0x01, 0x00, 0x00, 0x00, 0x89, 0x85, 0xb8, + 0x03, 0x00, 0x00 + }; + copy_block(op_lwarx_T0_T1_code, 27); + inc_code_ptr(27); +} +#endif + +DEFINE_GEN(gen_op_stwcx_T0_T1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_stwcx_T0_T1 +{ + static const uint8 op_stwcx_T0_T1_code[] = { + 0x0f, 0xb6, 0x85, 0x94, 0x03, 0x00, 0x00, 0x8b, 0x8d, 0x90, 0x03, 0x00, + 0x00, 0xc1, 0xe0, 0x1c, 0x81, 0xe1, 0xff, 0xff, 0xff, 0x0f, 0x09, 0xc1, + 0x8d, 0x45, 0x10, 0x8b, 0x90, 0xa8, 0x03, 0x00, 0x00, 0x85, 0xd2, 0x74, + 0x2b, 0x31, 0xd2, 0x39, 0xb0, 0xac, 0x03, 0x00, 0x00, 0x89, 0x90, 0xa8, + 0x03, 0x00, 0x00, 0x75, 0x1b, 0x89, 0xd8, 0x0f, 0xc8, 0x89, 0x86, 0x00, + 0x00, 0x00, 0x11, 0x81, 0xc9, 0x00, 0x00, 0x00, 0x20, 0x8d, 0x74, 0x26, + 0x00, 0x8d, 0xbc, 0x27, 0x00, 0x00, 0x00, 0x00, 0x89, 0x8d, 0x90, 0x03, + 0x00, 0x00 + }; + copy_block(op_stwcx_T0_T1_code, 86); + inc_code_ptr(86); +} +#endif + +DEFINE_GEN(gen_op_load_T0_CR,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T0_CR +{ + static const uint8 op_load_T0_CR_code[] = { + 0x8b, 0x9d, 0x90, 0x03, 0x00, 0x00 + }; + copy_block(op_load_T0_CR_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_T0_CR,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T0_CR +{ + static const uint8 op_store_T0_CR_code[] = { + 0x89, 0x9d, 0x90, 0x03, 0x00, 0x00 + }; + copy_block(op_store_T0_CR_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_T0_crb0,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T0_crb0 +{ + static const uint8 op_load_T0_crb0_code[] = { + 0x8b, 0x85, 0x90, 0x03, 0x00, 0x00, 0x89, 0xc3, 0xc1, 0xeb, 0x1f + }; + copy_block(op_load_T0_crb0_code, 11); + inc_code_ptr(11); +} +#endif + +DEFINE_GEN(gen_op_store_T0_crb0,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T0_crb0 +{ + static const uint8 op_store_T0_crb0_code[] = { + 0x8b, 0x85, 0x90, 0x03, 0x00, 0x00, 0x89, 0xda, 0xc1, 0xe2, 0x1f, 0x25, + 0xff, 0xff, 0xff, 0x7f, 0x09, 0xd0, 0x89, 0x85, 0x90, 0x03, 0x00, 0x00 + }; + copy_block(op_store_T0_crb0_code, 24); + inc_code_ptr(24); +} +#endif + +DEFINE_GEN(gen_op_load_T1_crb0,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T1_crb0 +{ + static const uint8 op_load_T1_crb0_code[] = { + 0x8b, 0x85, 0x90, 0x03, 0x00, 0x00, 0x89, 0xc6, 0xc1, 0xee, 0x1f + }; + copy_block(op_load_T1_crb0_code, 11); + inc_code_ptr(11); +} +#endif + +DEFINE_GEN(gen_op_store_T1_crb0,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T1_crb0 +{ + static const uint8 op_store_T1_crb0_code[] = { + 0x8b, 0x85, 0x90, 0x03, 0x00, 0x00, 0x89, 0xf2, 0xc1, 0xe2, 0x1f, 0x25, + 0xff, 0xff, 0xff, 0x7f, 0x09, 0xd0, 0x89, 0x85, 0x90, 0x03, 0x00, 0x00 + }; + copy_block(op_store_T1_crb0_code, 24); + inc_code_ptr(24); +} +#endif + +DEFINE_GEN(gen_op_load_T0_crb1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T0_crb1 +{ + static const uint8 op_load_T0_crb1_code[] = { + 0x8b, 0x85, 0x90, 0x03, 0x00, 0x00, 0xc1, 0xe8, 0x1e, 0x89, 0xc3, 0x83, + 0xe3, 0x01 + }; + copy_block(op_load_T0_crb1_code, 14); + inc_code_ptr(14); +} +#endif + +DEFINE_GEN(gen_op_store_T0_crb1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T0_crb1 +{ + static const uint8 op_store_T0_crb1_code[] = { + 0x8b, 0x95, 0x90, 0x03, 0x00, 0x00, 0x89, 0xd8, 0x83, 0xe0, 0x01, 0xc1, + 0xe0, 0x1e, 0x81, 0xe2, 0xff, 0xff, 0xff, 0xbf, 0x09, 0xc2, 0x89, 0x95, + 0x90, 0x03, 0x00, 0x00 + }; + copy_block(op_store_T0_crb1_code, 28); + inc_code_ptr(28); +} +#endif + +DEFINE_GEN(gen_op_load_T1_crb1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T1_crb1 +{ + static const uint8 op_load_T1_crb1_code[] = { + 0x8b, 0x85, 0x90, 0x03, 0x00, 0x00, 0xc1, 0xe8, 0x1e, 0x89, 0xc6, 0x83, + 0xe6, 0x01 + }; + copy_block(op_load_T1_crb1_code, 14); + inc_code_ptr(14); +} +#endif + +DEFINE_GEN(gen_op_store_T1_crb1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T1_crb1 +{ + static const uint8 op_store_T1_crb1_code[] = { + 0x8b, 0x95, 0x90, 0x03, 0x00, 0x00, 0x89, 0xf0, 0x83, 0xe0, 0x01, 0xc1, + 0xe0, 0x1e, 0x81, 0xe2, 0xff, 0xff, 0xff, 0xbf, 0x09, 0xc2, 0x89, 0x95, + 0x90, 0x03, 0x00, 0x00 + }; + copy_block(op_store_T1_crb1_code, 28); + inc_code_ptr(28); +} +#endif + +DEFINE_GEN(gen_op_load_T0_crb2,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T0_crb2 +{ + static const uint8 op_load_T0_crb2_code[] = { + 0x8b, 0x85, 0x90, 0x03, 0x00, 0x00, 0xc1, 0xe8, 0x1d, 0x89, 0xc3, 0x83, + 0xe3, 0x01 + }; + copy_block(op_load_T0_crb2_code, 14); + inc_code_ptr(14); +} +#endif + +DEFINE_GEN(gen_op_store_T0_crb2,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T0_crb2 +{ + static const uint8 op_store_T0_crb2_code[] = { + 0x8b, 0x95, 0x90, 0x03, 0x00, 0x00, 0x89, 0xd8, 0x83, 0xe0, 0x01, 0xc1, + 0xe0, 0x1d, 0x81, 0xe2, 0xff, 0xff, 0xff, 0xdf, 0x09, 0xc2, 0x89, 0x95, + 0x90, 0x03, 0x00, 0x00 + }; + copy_block(op_store_T0_crb2_code, 28); + inc_code_ptr(28); +} +#endif + +DEFINE_GEN(gen_op_load_T1_crb2,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T1_crb2 +{ + static const uint8 op_load_T1_crb2_code[] = { + 0x8b, 0x85, 0x90, 0x03, 0x00, 0x00, 0xc1, 0xe8, 0x1d, 0x89, 0xc6, 0x83, + 0xe6, 0x01 + }; + copy_block(op_load_T1_crb2_code, 14); + inc_code_ptr(14); +} +#endif + +DEFINE_GEN(gen_op_store_T1_crb2,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T1_crb2 +{ + static const uint8 op_store_T1_crb2_code[] = { + 0x8b, 0x95, 0x90, 0x03, 0x00, 0x00, 0x89, 0xf0, 0x83, 0xe0, 0x01, 0xc1, + 0xe0, 0x1d, 0x81, 0xe2, 0xff, 0xff, 0xff, 0xdf, 0x09, 0xc2, 0x89, 0x95, + 0x90, 0x03, 0x00, 0x00 + }; + copy_block(op_store_T1_crb2_code, 28); + inc_code_ptr(28); +} +#endif + +DEFINE_GEN(gen_op_load_T0_crb3,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T0_crb3 +{ + static const uint8 op_load_T0_crb3_code[] = { + 0x8b, 0x85, 0x90, 0x03, 0x00, 0x00, 0xc1, 0xe8, 0x1c, 0x89, 0xc3, 0x83, + 0xe3, 0x01 + }; + copy_block(op_load_T0_crb3_code, 14); + inc_code_ptr(14); +} +#endif + +DEFINE_GEN(gen_op_store_T0_crb3,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T0_crb3 +{ + static const uint8 op_store_T0_crb3_code[] = { + 0x8b, 0x95, 0x90, 0x03, 0x00, 0x00, 0x89, 0xd8, 0x83, 0xe0, 0x01, 0xc1, + 0xe0, 0x1c, 0x81, 0xe2, 0xff, 0xff, 0xff, 0xef, 0x09, 0xc2, 0x89, 0x95, + 0x90, 0x03, 0x00, 0x00 + }; + copy_block(op_store_T0_crb3_code, 28); + inc_code_ptr(28); +} +#endif + +DEFINE_GEN(gen_op_load_T1_crb3,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T1_crb3 +{ + static const uint8 op_load_T1_crb3_code[] = { + 0x8b, 0x85, 0x90, 0x03, 0x00, 0x00, 0xc1, 0xe8, 0x1c, 0x89, 0xc6, 0x83, + 0xe6, 0x01 + }; + copy_block(op_load_T1_crb3_code, 14); + inc_code_ptr(14); +} +#endif + +DEFINE_GEN(gen_op_store_T1_crb3,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T1_crb3 +{ + static const uint8 op_store_T1_crb3_code[] = { + 0x8b, 0x95, 0x90, 0x03, 0x00, 0x00, 0x89, 0xf0, 0x83, 0xe0, 0x01, 0xc1, + 0xe0, 0x1c, 0x81, 0xe2, 0xff, 0xff, 0xff, 0xef, 0x09, 0xc2, 0x89, 0x95, + 0x90, 0x03, 0x00, 0x00 + }; + copy_block(op_store_T1_crb3_code, 28); + inc_code_ptr(28); +} +#endif + +DEFINE_GEN(gen_op_load_T0_crb4,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T0_crb4 +{ + static const uint8 op_load_T0_crb4_code[] = { + 0x8b, 0x85, 0x90, 0x03, 0x00, 0x00, 0xc1, 0xe8, 0x1b, 0x89, 0xc3, 0x83, + 0xe3, 0x01 + }; + copy_block(op_load_T0_crb4_code, 14); + inc_code_ptr(14); +} +#endif + +DEFINE_GEN(gen_op_store_T0_crb4,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T0_crb4 +{ + static const uint8 op_store_T0_crb4_code[] = { + 0x8b, 0x95, 0x90, 0x03, 0x00, 0x00, 0x89, 0xd8, 0x83, 0xe0, 0x01, 0xc1, + 0xe0, 0x1b, 0x81, 0xe2, 0xff, 0xff, 0xff, 0xf7, 0x09, 0xc2, 0x89, 0x95, + 0x90, 0x03, 0x00, 0x00 + }; + copy_block(op_store_T0_crb4_code, 28); + inc_code_ptr(28); +} +#endif + +DEFINE_GEN(gen_op_load_T1_crb4,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T1_crb4 +{ + static const uint8 op_load_T1_crb4_code[] = { + 0x8b, 0x85, 0x90, 0x03, 0x00, 0x00, 0xc1, 0xe8, 0x1b, 0x89, 0xc6, 0x83, + 0xe6, 0x01 + }; + copy_block(op_load_T1_crb4_code, 14); + inc_code_ptr(14); +} +#endif + +DEFINE_GEN(gen_op_store_T1_crb4,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T1_crb4 +{ + static const uint8 op_store_T1_crb4_code[] = { + 0x8b, 0x95, 0x90, 0x03, 0x00, 0x00, 0x89, 0xf0, 0x83, 0xe0, 0x01, 0xc1, + 0xe0, 0x1b, 0x81, 0xe2, 0xff, 0xff, 0xff, 0xf7, 0x09, 0xc2, 0x89, 0x95, + 0x90, 0x03, 0x00, 0x00 + }; + copy_block(op_store_T1_crb4_code, 28); + inc_code_ptr(28); +} +#endif + +DEFINE_GEN(gen_op_load_T0_crb5,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T0_crb5 +{ + static const uint8 op_load_T0_crb5_code[] = { + 0x8b, 0x85, 0x90, 0x03, 0x00, 0x00, 0xc1, 0xe8, 0x1a, 0x89, 0xc3, 0x83, + 0xe3, 0x01 + }; + copy_block(op_load_T0_crb5_code, 14); + inc_code_ptr(14); +} +#endif + +DEFINE_GEN(gen_op_store_T0_crb5,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T0_crb5 +{ + static const uint8 op_store_T0_crb5_code[] = { + 0x8b, 0x95, 0x90, 0x03, 0x00, 0x00, 0x89, 0xd8, 0x83, 0xe0, 0x01, 0xc1, + 0xe0, 0x1a, 0x81, 0xe2, 0xff, 0xff, 0xff, 0xfb, 0x09, 0xc2, 0x89, 0x95, + 0x90, 0x03, 0x00, 0x00 + }; + copy_block(op_store_T0_crb5_code, 28); + inc_code_ptr(28); +} +#endif + +DEFINE_GEN(gen_op_load_T1_crb5,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T1_crb5 +{ + static const uint8 op_load_T1_crb5_code[] = { + 0x8b, 0x85, 0x90, 0x03, 0x00, 0x00, 0xc1, 0xe8, 0x1a, 0x89, 0xc6, 0x83, + 0xe6, 0x01 + }; + copy_block(op_load_T1_crb5_code, 14); + inc_code_ptr(14); +} +#endif + +DEFINE_GEN(gen_op_store_T1_crb5,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T1_crb5 +{ + static const uint8 op_store_T1_crb5_code[] = { + 0x8b, 0x95, 0x90, 0x03, 0x00, 0x00, 0x89, 0xf0, 0x83, 0xe0, 0x01, 0xc1, + 0xe0, 0x1a, 0x81, 0xe2, 0xff, 0xff, 0xff, 0xfb, 0x09, 0xc2, 0x89, 0x95, + 0x90, 0x03, 0x00, 0x00 + }; + copy_block(op_store_T1_crb5_code, 28); + inc_code_ptr(28); +} +#endif + +DEFINE_GEN(gen_op_load_T0_crb6,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T0_crb6 +{ + static const uint8 op_load_T0_crb6_code[] = { + 0x8b, 0x85, 0x90, 0x03, 0x00, 0x00, 0xc1, 0xe8, 0x19, 0x89, 0xc3, 0x83, + 0xe3, 0x01 + }; + copy_block(op_load_T0_crb6_code, 14); + inc_code_ptr(14); +} +#endif + +DEFINE_GEN(gen_op_store_T0_crb6,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T0_crb6 +{ + static const uint8 op_store_T0_crb6_code[] = { + 0x8b, 0x95, 0x90, 0x03, 0x00, 0x00, 0x89, 0xd8, 0x83, 0xe0, 0x01, 0xc1, + 0xe0, 0x19, 0x81, 0xe2, 0xff, 0xff, 0xff, 0xfd, 0x09, 0xc2, 0x89, 0x95, + 0x90, 0x03, 0x00, 0x00 + }; + copy_block(op_store_T0_crb6_code, 28); + inc_code_ptr(28); +} +#endif + +DEFINE_GEN(gen_op_load_T1_crb6,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T1_crb6 +{ + static const uint8 op_load_T1_crb6_code[] = { + 0x8b, 0x85, 0x90, 0x03, 0x00, 0x00, 0xc1, 0xe8, 0x19, 0x89, 0xc6, 0x83, + 0xe6, 0x01 + }; + copy_block(op_load_T1_crb6_code, 14); + inc_code_ptr(14); +} +#endif + +DEFINE_GEN(gen_op_store_T1_crb6,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T1_crb6 +{ + static const uint8 op_store_T1_crb6_code[] = { + 0x8b, 0x95, 0x90, 0x03, 0x00, 0x00, 0x89, 0xf0, 0x83, 0xe0, 0x01, 0xc1, + 0xe0, 0x19, 0x81, 0xe2, 0xff, 0xff, 0xff, 0xfd, 0x09, 0xc2, 0x89, 0x95, + 0x90, 0x03, 0x00, 0x00 + }; + copy_block(op_store_T1_crb6_code, 28); + inc_code_ptr(28); +} +#endif + +DEFINE_GEN(gen_op_load_T0_crb7,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T0_crb7 +{ + static const uint8 op_load_T0_crb7_code[] = { + 0x0f, 0xb6, 0x85, 0x93, 0x03, 0x00, 0x00, 0x89, 0xc3, 0x83, 0xe3, 0x01 + }; + copy_block(op_load_T0_crb7_code, 12); + inc_code_ptr(12); +} +#endif + +DEFINE_GEN(gen_op_store_T0_crb7,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T0_crb7 +{ + static const uint8 op_store_T0_crb7_code[] = { + 0x8b, 0x95, 0x90, 0x03, 0x00, 0x00, 0x89, 0xd8, 0x83, 0xe0, 0x01, 0xc1, + 0xe0, 0x18, 0x81, 0xe2, 0xff, 0xff, 0xff, 0xfe, 0x09, 0xc2, 0x89, 0x95, + 0x90, 0x03, 0x00, 0x00 + }; + copy_block(op_store_T0_crb7_code, 28); + inc_code_ptr(28); +} +#endif + +DEFINE_GEN(gen_op_load_T1_crb7,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T1_crb7 +{ + static const uint8 op_load_T1_crb7_code[] = { + 0x0f, 0xb6, 0x85, 0x93, 0x03, 0x00, 0x00, 0x89, 0xc6, 0x83, 0xe6, 0x01 + }; + copy_block(op_load_T1_crb7_code, 12); + inc_code_ptr(12); +} +#endif + +DEFINE_GEN(gen_op_store_T1_crb7,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T1_crb7 +{ + static const uint8 op_store_T1_crb7_code[] = { + 0x8b, 0x95, 0x90, 0x03, 0x00, 0x00, 0x89, 0xf0, 0x83, 0xe0, 0x01, 0xc1, + 0xe0, 0x18, 0x81, 0xe2, 0xff, 0xff, 0xff, 0xfe, 0x09, 0xc2, 0x89, 0x95, + 0x90, 0x03, 0x00, 0x00 + }; + copy_block(op_store_T1_crb7_code, 28); + inc_code_ptr(28); +} +#endif + +DEFINE_GEN(gen_op_load_T0_crb8,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T0_crb8 +{ + static const uint8 op_load_T0_crb8_code[] = { + 0x8b, 0x85, 0x90, 0x03, 0x00, 0x00, 0xc1, 0xe8, 0x17, 0x89, 0xc3, 0x83, + 0xe3, 0x01 + }; + copy_block(op_load_T0_crb8_code, 14); + inc_code_ptr(14); +} +#endif + +DEFINE_GEN(gen_op_store_T0_crb8,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T0_crb8 +{ + static const uint8 op_store_T0_crb8_code[] = { + 0x8b, 0x95, 0x90, 0x03, 0x00, 0x00, 0x89, 0xd8, 0x83, 0xe0, 0x01, 0xc1, + 0xe0, 0x17, 0x81, 0xe2, 0xff, 0xff, 0x7f, 0xff, 0x09, 0xc2, 0x89, 0x95, + 0x90, 0x03, 0x00, 0x00 + }; + copy_block(op_store_T0_crb8_code, 28); + inc_code_ptr(28); +} +#endif + +DEFINE_GEN(gen_op_load_T1_crb8,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T1_crb8 +{ + static const uint8 op_load_T1_crb8_code[] = { + 0x8b, 0x85, 0x90, 0x03, 0x00, 0x00, 0xc1, 0xe8, 0x17, 0x89, 0xc6, 0x83, + 0xe6, 0x01 + }; + copy_block(op_load_T1_crb8_code, 14); + inc_code_ptr(14); +} +#endif + +DEFINE_GEN(gen_op_store_T1_crb8,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T1_crb8 +{ + static const uint8 op_store_T1_crb8_code[] = { + 0x8b, 0x95, 0x90, 0x03, 0x00, 0x00, 0x89, 0xf0, 0x83, 0xe0, 0x01, 0xc1, + 0xe0, 0x17, 0x81, 0xe2, 0xff, 0xff, 0x7f, 0xff, 0x09, 0xc2, 0x89, 0x95, + 0x90, 0x03, 0x00, 0x00 + }; + copy_block(op_store_T1_crb8_code, 28); + inc_code_ptr(28); +} +#endif + +DEFINE_GEN(gen_op_load_T0_crb9,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T0_crb9 +{ + static const uint8 op_load_T0_crb9_code[] = { + 0x8b, 0x85, 0x90, 0x03, 0x00, 0x00, 0xc1, 0xe8, 0x16, 0x89, 0xc3, 0x83, + 0xe3, 0x01 + }; + copy_block(op_load_T0_crb9_code, 14); + inc_code_ptr(14); +} +#endif + +DEFINE_GEN(gen_op_store_T0_crb9,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T0_crb9 +{ + static const uint8 op_store_T0_crb9_code[] = { + 0x8b, 0x95, 0x90, 0x03, 0x00, 0x00, 0x89, 0xd8, 0x83, 0xe0, 0x01, 0xc1, + 0xe0, 0x16, 0x81, 0xe2, 0xff, 0xff, 0xbf, 0xff, 0x09, 0xc2, 0x89, 0x95, + 0x90, 0x03, 0x00, 0x00 + }; + copy_block(op_store_T0_crb9_code, 28); + inc_code_ptr(28); +} +#endif + +DEFINE_GEN(gen_op_load_T1_crb9,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T1_crb9 +{ + static const uint8 op_load_T1_crb9_code[] = { + 0x8b, 0x85, 0x90, 0x03, 0x00, 0x00, 0xc1, 0xe8, 0x16, 0x89, 0xc6, 0x83, + 0xe6, 0x01 + }; + copy_block(op_load_T1_crb9_code, 14); + inc_code_ptr(14); +} +#endif + +DEFINE_GEN(gen_op_store_T1_crb9,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T1_crb9 +{ + static const uint8 op_store_T1_crb9_code[] = { + 0x8b, 0x95, 0x90, 0x03, 0x00, 0x00, 0x89, 0xf0, 0x83, 0xe0, 0x01, 0xc1, + 0xe0, 0x16, 0x81, 0xe2, 0xff, 0xff, 0xbf, 0xff, 0x09, 0xc2, 0x89, 0x95, + 0x90, 0x03, 0x00, 0x00 + }; + copy_block(op_store_T1_crb9_code, 28); + inc_code_ptr(28); +} +#endif + +DEFINE_GEN(gen_op_load_T0_crb10,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T0_crb10 +{ + static const uint8 op_load_T0_crb10_code[] = { + 0x8b, 0x85, 0x90, 0x03, 0x00, 0x00, 0xc1, 0xe8, 0x15, 0x89, 0xc3, 0x83, + 0xe3, 0x01 + }; + copy_block(op_load_T0_crb10_code, 14); + inc_code_ptr(14); +} +#endif + +DEFINE_GEN(gen_op_store_T0_crb10,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T0_crb10 +{ + static const uint8 op_store_T0_crb10_code[] = { + 0x8b, 0x95, 0x90, 0x03, 0x00, 0x00, 0x89, 0xd8, 0x83, 0xe0, 0x01, 0xc1, + 0xe0, 0x15, 0x81, 0xe2, 0xff, 0xff, 0xdf, 0xff, 0x09, 0xc2, 0x89, 0x95, + 0x90, 0x03, 0x00, 0x00 + }; + copy_block(op_store_T0_crb10_code, 28); + inc_code_ptr(28); +} +#endif + +DEFINE_GEN(gen_op_load_T1_crb10,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T1_crb10 +{ + static const uint8 op_load_T1_crb10_code[] = { + 0x8b, 0x85, 0x90, 0x03, 0x00, 0x00, 0xc1, 0xe8, 0x15, 0x89, 0xc6, 0x83, + 0xe6, 0x01 + }; + copy_block(op_load_T1_crb10_code, 14); + inc_code_ptr(14); +} +#endif + +DEFINE_GEN(gen_op_store_T1_crb10,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T1_crb10 +{ + static const uint8 op_store_T1_crb10_code[] = { + 0x8b, 0x95, 0x90, 0x03, 0x00, 0x00, 0x89, 0xf0, 0x83, 0xe0, 0x01, 0xc1, + 0xe0, 0x15, 0x81, 0xe2, 0xff, 0xff, 0xdf, 0xff, 0x09, 0xc2, 0x89, 0x95, + 0x90, 0x03, 0x00, 0x00 + }; + copy_block(op_store_T1_crb10_code, 28); + inc_code_ptr(28); +} +#endif + +DEFINE_GEN(gen_op_load_T0_crb11,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T0_crb11 +{ + static const uint8 op_load_T0_crb11_code[] = { + 0x8b, 0x85, 0x90, 0x03, 0x00, 0x00, 0xc1, 0xe8, 0x14, 0x89, 0xc3, 0x83, + 0xe3, 0x01 + }; + copy_block(op_load_T0_crb11_code, 14); + inc_code_ptr(14); +} +#endif + +DEFINE_GEN(gen_op_store_T0_crb11,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T0_crb11 +{ + static const uint8 op_store_T0_crb11_code[] = { + 0x8b, 0x95, 0x90, 0x03, 0x00, 0x00, 0x89, 0xd8, 0x83, 0xe0, 0x01, 0xc1, + 0xe0, 0x14, 0x81, 0xe2, 0xff, 0xff, 0xef, 0xff, 0x09, 0xc2, 0x89, 0x95, + 0x90, 0x03, 0x00, 0x00 + }; + copy_block(op_store_T0_crb11_code, 28); + inc_code_ptr(28); +} +#endif + +DEFINE_GEN(gen_op_load_T1_crb11,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T1_crb11 +{ + static const uint8 op_load_T1_crb11_code[] = { + 0x8b, 0x85, 0x90, 0x03, 0x00, 0x00, 0xc1, 0xe8, 0x14, 0x89, 0xc6, 0x83, + 0xe6, 0x01 + }; + copy_block(op_load_T1_crb11_code, 14); + inc_code_ptr(14); +} +#endif + +DEFINE_GEN(gen_op_store_T1_crb11,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T1_crb11 +{ + static const uint8 op_store_T1_crb11_code[] = { + 0x8b, 0x95, 0x90, 0x03, 0x00, 0x00, 0x89, 0xf0, 0x83, 0xe0, 0x01, 0xc1, + 0xe0, 0x14, 0x81, 0xe2, 0xff, 0xff, 0xef, 0xff, 0x09, 0xc2, 0x89, 0x95, + 0x90, 0x03, 0x00, 0x00 + }; + copy_block(op_store_T1_crb11_code, 28); + inc_code_ptr(28); +} +#endif + +DEFINE_GEN(gen_op_load_T0_crb12,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T0_crb12 +{ + static const uint8 op_load_T0_crb12_code[] = { + 0x8b, 0x85, 0x90, 0x03, 0x00, 0x00, 0xc1, 0xe8, 0x13, 0x89, 0xc3, 0x83, + 0xe3, 0x01 + }; + copy_block(op_load_T0_crb12_code, 14); + inc_code_ptr(14); +} +#endif + +DEFINE_GEN(gen_op_store_T0_crb12,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T0_crb12 +{ + static const uint8 op_store_T0_crb12_code[] = { + 0x8b, 0x95, 0x90, 0x03, 0x00, 0x00, 0x89, 0xd8, 0x83, 0xe0, 0x01, 0xc1, + 0xe0, 0x13, 0x81, 0xe2, 0xff, 0xff, 0xf7, 0xff, 0x09, 0xc2, 0x89, 0x95, + 0x90, 0x03, 0x00, 0x00 + }; + copy_block(op_store_T0_crb12_code, 28); + inc_code_ptr(28); +} +#endif + +DEFINE_GEN(gen_op_load_T1_crb12,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T1_crb12 +{ + static const uint8 op_load_T1_crb12_code[] = { + 0x8b, 0x85, 0x90, 0x03, 0x00, 0x00, 0xc1, 0xe8, 0x13, 0x89, 0xc6, 0x83, + 0xe6, 0x01 + }; + copy_block(op_load_T1_crb12_code, 14); + inc_code_ptr(14); +} +#endif + +DEFINE_GEN(gen_op_store_T1_crb12,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T1_crb12 +{ + static const uint8 op_store_T1_crb12_code[] = { + 0x8b, 0x95, 0x90, 0x03, 0x00, 0x00, 0x89, 0xf0, 0x83, 0xe0, 0x01, 0xc1, + 0xe0, 0x13, 0x81, 0xe2, 0xff, 0xff, 0xf7, 0xff, 0x09, 0xc2, 0x89, 0x95, + 0x90, 0x03, 0x00, 0x00 + }; + copy_block(op_store_T1_crb12_code, 28); + inc_code_ptr(28); +} +#endif + +DEFINE_GEN(gen_op_load_T0_crb13,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T0_crb13 +{ + static const uint8 op_load_T0_crb13_code[] = { + 0x8b, 0x85, 0x90, 0x03, 0x00, 0x00, 0xc1, 0xe8, 0x12, 0x89, 0xc3, 0x83, + 0xe3, 0x01 + }; + copy_block(op_load_T0_crb13_code, 14); + inc_code_ptr(14); +} +#endif + +DEFINE_GEN(gen_op_store_T0_crb13,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T0_crb13 +{ + static const uint8 op_store_T0_crb13_code[] = { + 0x8b, 0x95, 0x90, 0x03, 0x00, 0x00, 0x89, 0xd8, 0x83, 0xe0, 0x01, 0xc1, + 0xe0, 0x12, 0x81, 0xe2, 0xff, 0xff, 0xfb, 0xff, 0x09, 0xc2, 0x89, 0x95, + 0x90, 0x03, 0x00, 0x00 + }; + copy_block(op_store_T0_crb13_code, 28); + inc_code_ptr(28); +} +#endif + +DEFINE_GEN(gen_op_load_T1_crb13,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T1_crb13 +{ + static const uint8 op_load_T1_crb13_code[] = { + 0x8b, 0x85, 0x90, 0x03, 0x00, 0x00, 0xc1, 0xe8, 0x12, 0x89, 0xc6, 0x83, + 0xe6, 0x01 + }; + copy_block(op_load_T1_crb13_code, 14); + inc_code_ptr(14); +} +#endif + +DEFINE_GEN(gen_op_store_T1_crb13,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T1_crb13 +{ + static const uint8 op_store_T1_crb13_code[] = { + 0x8b, 0x95, 0x90, 0x03, 0x00, 0x00, 0x89, 0xf0, 0x83, 0xe0, 0x01, 0xc1, + 0xe0, 0x12, 0x81, 0xe2, 0xff, 0xff, 0xfb, 0xff, 0x09, 0xc2, 0x89, 0x95, + 0x90, 0x03, 0x00, 0x00 + }; + copy_block(op_store_T1_crb13_code, 28); + inc_code_ptr(28); +} +#endif + +DEFINE_GEN(gen_op_load_T0_crb14,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T0_crb14 +{ + static const uint8 op_load_T0_crb14_code[] = { + 0x8b, 0x85, 0x90, 0x03, 0x00, 0x00, 0xc1, 0xe8, 0x11, 0x89, 0xc3, 0x83, + 0xe3, 0x01 + }; + copy_block(op_load_T0_crb14_code, 14); + inc_code_ptr(14); +} +#endif + +DEFINE_GEN(gen_op_store_T0_crb14,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T0_crb14 +{ + static const uint8 op_store_T0_crb14_code[] = { + 0x8b, 0x95, 0x90, 0x03, 0x00, 0x00, 0x89, 0xd8, 0x83, 0xe0, 0x01, 0xc1, + 0xe0, 0x11, 0x81, 0xe2, 0xff, 0xff, 0xfd, 0xff, 0x09, 0xc2, 0x89, 0x95, + 0x90, 0x03, 0x00, 0x00 + }; + copy_block(op_store_T0_crb14_code, 28); + inc_code_ptr(28); +} +#endif + +DEFINE_GEN(gen_op_load_T1_crb14,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T1_crb14 +{ + static const uint8 op_load_T1_crb14_code[] = { + 0x8b, 0x85, 0x90, 0x03, 0x00, 0x00, 0xc1, 0xe8, 0x11, 0x89, 0xc6, 0x83, + 0xe6, 0x01 + }; + copy_block(op_load_T1_crb14_code, 14); + inc_code_ptr(14); +} +#endif + +DEFINE_GEN(gen_op_store_T1_crb14,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T1_crb14 +{ + static const uint8 op_store_T1_crb14_code[] = { + 0x8b, 0x95, 0x90, 0x03, 0x00, 0x00, 0x89, 0xf0, 0x83, 0xe0, 0x01, 0xc1, + 0xe0, 0x11, 0x81, 0xe2, 0xff, 0xff, 0xfd, 0xff, 0x09, 0xc2, 0x89, 0x95, + 0x90, 0x03, 0x00, 0x00 + }; + copy_block(op_store_T1_crb14_code, 28); + inc_code_ptr(28); +} +#endif + +DEFINE_GEN(gen_op_load_T0_crb15,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T0_crb15 +{ + static const uint8 op_load_T0_crb15_code[] = { + 0x0f, 0xb7, 0x85, 0x92, 0x03, 0x00, 0x00, 0x89, 0xc3, 0x83, 0xe3, 0x01 + }; + copy_block(op_load_T0_crb15_code, 12); + inc_code_ptr(12); +} +#endif + +DEFINE_GEN(gen_op_store_T0_crb15,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T0_crb15 +{ + static const uint8 op_store_T0_crb15_code[] = { + 0x8b, 0x95, 0x90, 0x03, 0x00, 0x00, 0x89, 0xd8, 0x83, 0xe0, 0x01, 0xc1, + 0xe0, 0x10, 0x81, 0xe2, 0xff, 0xff, 0xfe, 0xff, 0x09, 0xc2, 0x89, 0x95, + 0x90, 0x03, 0x00, 0x00 + }; + copy_block(op_store_T0_crb15_code, 28); + inc_code_ptr(28); +} +#endif + +DEFINE_GEN(gen_op_load_T1_crb15,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T1_crb15 +{ + static const uint8 op_load_T1_crb15_code[] = { + 0x0f, 0xb7, 0x85, 0x92, 0x03, 0x00, 0x00, 0x89, 0xc6, 0x83, 0xe6, 0x01 + }; + copy_block(op_load_T1_crb15_code, 12); + inc_code_ptr(12); +} +#endif + +DEFINE_GEN(gen_op_store_T1_crb15,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T1_crb15 +{ + static const uint8 op_store_T1_crb15_code[] = { + 0x8b, 0x95, 0x90, 0x03, 0x00, 0x00, 0x89, 0xf0, 0x83, 0xe0, 0x01, 0xc1, + 0xe0, 0x10, 0x81, 0xe2, 0xff, 0xff, 0xfe, 0xff, 0x09, 0xc2, 0x89, 0x95, + 0x90, 0x03, 0x00, 0x00 + }; + copy_block(op_store_T1_crb15_code, 28); + inc_code_ptr(28); +} +#endif + +DEFINE_GEN(gen_op_load_T0_crb16,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T0_crb16 +{ + static const uint8 op_load_T0_crb16_code[] = { + 0x8b, 0x85, 0x90, 0x03, 0x00, 0x00, 0xc1, 0xe8, 0x0f, 0x89, 0xc3, 0x83, + 0xe3, 0x01 + }; + copy_block(op_load_T0_crb16_code, 14); + inc_code_ptr(14); +} +#endif + +DEFINE_GEN(gen_op_store_T0_crb16,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T0_crb16 +{ + static const uint8 op_store_T0_crb16_code[] = { + 0x8b, 0x95, 0x90, 0x03, 0x00, 0x00, 0x89, 0xd8, 0x83, 0xe0, 0x01, 0xc1, + 0xe0, 0x0f, 0x81, 0xe2, 0xff, 0x7f, 0xff, 0xff, 0x09, 0xc2, 0x89, 0x95, + 0x90, 0x03, 0x00, 0x00 + }; + copy_block(op_store_T0_crb16_code, 28); + inc_code_ptr(28); +} +#endif + +DEFINE_GEN(gen_op_load_T1_crb16,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T1_crb16 +{ + static const uint8 op_load_T1_crb16_code[] = { + 0x8b, 0x85, 0x90, 0x03, 0x00, 0x00, 0xc1, 0xe8, 0x0f, 0x89, 0xc6, 0x83, + 0xe6, 0x01 + }; + copy_block(op_load_T1_crb16_code, 14); + inc_code_ptr(14); +} +#endif + +DEFINE_GEN(gen_op_store_T1_crb16,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T1_crb16 +{ + static const uint8 op_store_T1_crb16_code[] = { + 0x8b, 0x95, 0x90, 0x03, 0x00, 0x00, 0x89, 0xf0, 0x83, 0xe0, 0x01, 0xc1, + 0xe0, 0x0f, 0x81, 0xe2, 0xff, 0x7f, 0xff, 0xff, 0x09, 0xc2, 0x89, 0x95, + 0x90, 0x03, 0x00, 0x00 + }; + copy_block(op_store_T1_crb16_code, 28); + inc_code_ptr(28); +} +#endif + +DEFINE_GEN(gen_op_load_T0_crb17,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T0_crb17 +{ + static const uint8 op_load_T0_crb17_code[] = { + 0x8b, 0x85, 0x90, 0x03, 0x00, 0x00, 0xc1, 0xe8, 0x0e, 0x89, 0xc3, 0x83, + 0xe3, 0x01 + }; + copy_block(op_load_T0_crb17_code, 14); + inc_code_ptr(14); +} +#endif + +DEFINE_GEN(gen_op_store_T0_crb17,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T0_crb17 +{ + static const uint8 op_store_T0_crb17_code[] = { + 0x8b, 0x95, 0x90, 0x03, 0x00, 0x00, 0x89, 0xd8, 0x83, 0xe0, 0x01, 0xc1, + 0xe0, 0x0e, 0x81, 0xe2, 0xff, 0xbf, 0xff, 0xff, 0x09, 0xc2, 0x89, 0x95, + 0x90, 0x03, 0x00, 0x00 + }; + copy_block(op_store_T0_crb17_code, 28); + inc_code_ptr(28); +} +#endif + +DEFINE_GEN(gen_op_load_T1_crb17,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T1_crb17 +{ + static const uint8 op_load_T1_crb17_code[] = { + 0x8b, 0x85, 0x90, 0x03, 0x00, 0x00, 0xc1, 0xe8, 0x0e, 0x89, 0xc6, 0x83, + 0xe6, 0x01 + }; + copy_block(op_load_T1_crb17_code, 14); + inc_code_ptr(14); +} +#endif + +DEFINE_GEN(gen_op_store_T1_crb17,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T1_crb17 +{ + static const uint8 op_store_T1_crb17_code[] = { + 0x8b, 0x95, 0x90, 0x03, 0x00, 0x00, 0x89, 0xf0, 0x83, 0xe0, 0x01, 0xc1, + 0xe0, 0x0e, 0x81, 0xe2, 0xff, 0xbf, 0xff, 0xff, 0x09, 0xc2, 0x89, 0x95, + 0x90, 0x03, 0x00, 0x00 + }; + copy_block(op_store_T1_crb17_code, 28); + inc_code_ptr(28); +} +#endif + +DEFINE_GEN(gen_op_load_T0_crb18,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T0_crb18 +{ + static const uint8 op_load_T0_crb18_code[] = { + 0x8b, 0x85, 0x90, 0x03, 0x00, 0x00, 0xc1, 0xe8, 0x0d, 0x89, 0xc3, 0x83, + 0xe3, 0x01 + }; + copy_block(op_load_T0_crb18_code, 14); + inc_code_ptr(14); +} +#endif + +DEFINE_GEN(gen_op_store_T0_crb18,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T0_crb18 +{ + static const uint8 op_store_T0_crb18_code[] = { + 0x8b, 0x95, 0x90, 0x03, 0x00, 0x00, 0x89, 0xd8, 0x83, 0xe0, 0x01, 0xc1, + 0xe0, 0x0d, 0x81, 0xe2, 0xff, 0xdf, 0xff, 0xff, 0x09, 0xc2, 0x89, 0x95, + 0x90, 0x03, 0x00, 0x00 + }; + copy_block(op_store_T0_crb18_code, 28); + inc_code_ptr(28); +} +#endif + +DEFINE_GEN(gen_op_load_T1_crb18,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T1_crb18 +{ + static const uint8 op_load_T1_crb18_code[] = { + 0x8b, 0x85, 0x90, 0x03, 0x00, 0x00, 0xc1, 0xe8, 0x0d, 0x89, 0xc6, 0x83, + 0xe6, 0x01 + }; + copy_block(op_load_T1_crb18_code, 14); + inc_code_ptr(14); +} +#endif + +DEFINE_GEN(gen_op_store_T1_crb18,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T1_crb18 +{ + static const uint8 op_store_T1_crb18_code[] = { + 0x8b, 0x95, 0x90, 0x03, 0x00, 0x00, 0x89, 0xf0, 0x83, 0xe0, 0x01, 0xc1, + 0xe0, 0x0d, 0x81, 0xe2, 0xff, 0xdf, 0xff, 0xff, 0x09, 0xc2, 0x89, 0x95, + 0x90, 0x03, 0x00, 0x00 + }; + copy_block(op_store_T1_crb18_code, 28); + inc_code_ptr(28); +} +#endif + +DEFINE_GEN(gen_op_load_T0_crb19,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T0_crb19 +{ + static const uint8 op_load_T0_crb19_code[] = { + 0x8b, 0x85, 0x90, 0x03, 0x00, 0x00, 0xc1, 0xe8, 0x0c, 0x89, 0xc3, 0x83, + 0xe3, 0x01 + }; + copy_block(op_load_T0_crb19_code, 14); + inc_code_ptr(14); +} +#endif + +DEFINE_GEN(gen_op_store_T0_crb19,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T0_crb19 +{ + static const uint8 op_store_T0_crb19_code[] = { + 0x8b, 0x95, 0x90, 0x03, 0x00, 0x00, 0x89, 0xd8, 0x83, 0xe0, 0x01, 0xc1, + 0xe0, 0x0c, 0x81, 0xe2, 0xff, 0xef, 0xff, 0xff, 0x09, 0xc2, 0x89, 0x95, + 0x90, 0x03, 0x00, 0x00 + }; + copy_block(op_store_T0_crb19_code, 28); + inc_code_ptr(28); +} +#endif + +DEFINE_GEN(gen_op_load_T1_crb19,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T1_crb19 +{ + static const uint8 op_load_T1_crb19_code[] = { + 0x8b, 0x85, 0x90, 0x03, 0x00, 0x00, 0xc1, 0xe8, 0x0c, 0x89, 0xc6, 0x83, + 0xe6, 0x01 + }; + copy_block(op_load_T1_crb19_code, 14); + inc_code_ptr(14); +} +#endif + +DEFINE_GEN(gen_op_store_T1_crb19,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T1_crb19 +{ + static const uint8 op_store_T1_crb19_code[] = { + 0x8b, 0x95, 0x90, 0x03, 0x00, 0x00, 0x89, 0xf0, 0x83, 0xe0, 0x01, 0xc1, + 0xe0, 0x0c, 0x81, 0xe2, 0xff, 0xef, 0xff, 0xff, 0x09, 0xc2, 0x89, 0x95, + 0x90, 0x03, 0x00, 0x00 + }; + copy_block(op_store_T1_crb19_code, 28); + inc_code_ptr(28); +} +#endif + +DEFINE_GEN(gen_op_load_T0_crb20,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T0_crb20 +{ + static const uint8 op_load_T0_crb20_code[] = { + 0x8b, 0x85, 0x90, 0x03, 0x00, 0x00, 0xc1, 0xe8, 0x0b, 0x89, 0xc3, 0x83, + 0xe3, 0x01 + }; + copy_block(op_load_T0_crb20_code, 14); + inc_code_ptr(14); +} +#endif + +DEFINE_GEN(gen_op_store_T0_crb20,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T0_crb20 +{ + static const uint8 op_store_T0_crb20_code[] = { + 0x8b, 0x95, 0x90, 0x03, 0x00, 0x00, 0x89, 0xd8, 0x83, 0xe0, 0x01, 0xc1, + 0xe0, 0x0b, 0x81, 0xe2, 0xff, 0xf7, 0xff, 0xff, 0x09, 0xc2, 0x89, 0x95, + 0x90, 0x03, 0x00, 0x00 + }; + copy_block(op_store_T0_crb20_code, 28); + inc_code_ptr(28); +} +#endif + +DEFINE_GEN(gen_op_load_T1_crb20,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T1_crb20 +{ + static const uint8 op_load_T1_crb20_code[] = { + 0x8b, 0x85, 0x90, 0x03, 0x00, 0x00, 0xc1, 0xe8, 0x0b, 0x89, 0xc6, 0x83, + 0xe6, 0x01 + }; + copy_block(op_load_T1_crb20_code, 14); + inc_code_ptr(14); +} +#endif + +DEFINE_GEN(gen_op_store_T1_crb20,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T1_crb20 +{ + static const uint8 op_store_T1_crb20_code[] = { + 0x8b, 0x95, 0x90, 0x03, 0x00, 0x00, 0x89, 0xf0, 0x83, 0xe0, 0x01, 0xc1, + 0xe0, 0x0b, 0x81, 0xe2, 0xff, 0xf7, 0xff, 0xff, 0x09, 0xc2, 0x89, 0x95, + 0x90, 0x03, 0x00, 0x00 + }; + copy_block(op_store_T1_crb20_code, 28); + inc_code_ptr(28); +} +#endif + +DEFINE_GEN(gen_op_load_T0_crb21,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T0_crb21 +{ + static const uint8 op_load_T0_crb21_code[] = { + 0x8b, 0x85, 0x90, 0x03, 0x00, 0x00, 0xc1, 0xe8, 0x0a, 0x89, 0xc3, 0x83, + 0xe3, 0x01 + }; + copy_block(op_load_T0_crb21_code, 14); + inc_code_ptr(14); +} +#endif + +DEFINE_GEN(gen_op_store_T0_crb21,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T0_crb21 +{ + static const uint8 op_store_T0_crb21_code[] = { + 0x8b, 0x95, 0x90, 0x03, 0x00, 0x00, 0x89, 0xd8, 0x83, 0xe0, 0x01, 0xc1, + 0xe0, 0x0a, 0x81, 0xe2, 0xff, 0xfb, 0xff, 0xff, 0x09, 0xc2, 0x89, 0x95, + 0x90, 0x03, 0x00, 0x00 + }; + copy_block(op_store_T0_crb21_code, 28); + inc_code_ptr(28); +} +#endif + +DEFINE_GEN(gen_op_load_T1_crb21,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T1_crb21 +{ + static const uint8 op_load_T1_crb21_code[] = { + 0x8b, 0x85, 0x90, 0x03, 0x00, 0x00, 0xc1, 0xe8, 0x0a, 0x89, 0xc6, 0x83, + 0xe6, 0x01 + }; + copy_block(op_load_T1_crb21_code, 14); + inc_code_ptr(14); +} +#endif + +DEFINE_GEN(gen_op_store_T1_crb21,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T1_crb21 +{ + static const uint8 op_store_T1_crb21_code[] = { + 0x8b, 0x95, 0x90, 0x03, 0x00, 0x00, 0x89, 0xf0, 0x83, 0xe0, 0x01, 0xc1, + 0xe0, 0x0a, 0x81, 0xe2, 0xff, 0xfb, 0xff, 0xff, 0x09, 0xc2, 0x89, 0x95, + 0x90, 0x03, 0x00, 0x00 + }; + copy_block(op_store_T1_crb21_code, 28); + inc_code_ptr(28); +} +#endif + +DEFINE_GEN(gen_op_load_T0_crb22,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T0_crb22 +{ + static const uint8 op_load_T0_crb22_code[] = { + 0x8b, 0x85, 0x90, 0x03, 0x00, 0x00, 0xc1, 0xe8, 0x09, 0x89, 0xc3, 0x83, + 0xe3, 0x01 + }; + copy_block(op_load_T0_crb22_code, 14); + inc_code_ptr(14); +} +#endif + +DEFINE_GEN(gen_op_store_T0_crb22,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T0_crb22 +{ + static const uint8 op_store_T0_crb22_code[] = { + 0x8b, 0x95, 0x90, 0x03, 0x00, 0x00, 0x89, 0xd8, 0x83, 0xe0, 0x01, 0xc1, + 0xe0, 0x09, 0x81, 0xe2, 0xff, 0xfd, 0xff, 0xff, 0x09, 0xc2, 0x89, 0x95, + 0x90, 0x03, 0x00, 0x00 + }; + copy_block(op_store_T0_crb22_code, 28); + inc_code_ptr(28); +} +#endif + +DEFINE_GEN(gen_op_load_T1_crb22,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T1_crb22 +{ + static const uint8 op_load_T1_crb22_code[] = { + 0x8b, 0x85, 0x90, 0x03, 0x00, 0x00, 0xc1, 0xe8, 0x09, 0x89, 0xc6, 0x83, + 0xe6, 0x01 + }; + copy_block(op_load_T1_crb22_code, 14); + inc_code_ptr(14); +} +#endif + +DEFINE_GEN(gen_op_store_T1_crb22,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T1_crb22 +{ + static const uint8 op_store_T1_crb22_code[] = { + 0x8b, 0x95, 0x90, 0x03, 0x00, 0x00, 0x89, 0xf0, 0x83, 0xe0, 0x01, 0xc1, + 0xe0, 0x09, 0x81, 0xe2, 0xff, 0xfd, 0xff, 0xff, 0x09, 0xc2, 0x89, 0x95, + 0x90, 0x03, 0x00, 0x00 + }; + copy_block(op_store_T1_crb22_code, 28); + inc_code_ptr(28); +} +#endif + +DEFINE_GEN(gen_op_load_T0_crb23,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T0_crb23 +{ + static const uint8 op_load_T0_crb23_code[] = { + 0x8b, 0x85, 0x90, 0x03, 0x00, 0x00, 0xc1, 0xe8, 0x08, 0x89, 0xc3, 0x83, + 0xe3, 0x01 + }; + copy_block(op_load_T0_crb23_code, 14); + inc_code_ptr(14); +} +#endif + +DEFINE_GEN(gen_op_store_T0_crb23,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T0_crb23 +{ + static const uint8 op_store_T0_crb23_code[] = { + 0x8b, 0x95, 0x90, 0x03, 0x00, 0x00, 0x89, 0xd8, 0x83, 0xe0, 0x01, 0xc1, + 0xe0, 0x08, 0x81, 0xe2, 0xff, 0xfe, 0xff, 0xff, 0x09, 0xc2, 0x89, 0x95, + 0x90, 0x03, 0x00, 0x00 + }; + copy_block(op_store_T0_crb23_code, 28); + inc_code_ptr(28); +} +#endif + +DEFINE_GEN(gen_op_load_T1_crb23,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T1_crb23 +{ + static const uint8 op_load_T1_crb23_code[] = { + 0x8b, 0x85, 0x90, 0x03, 0x00, 0x00, 0xc1, 0xe8, 0x08, 0x89, 0xc6, 0x83, + 0xe6, 0x01 + }; + copy_block(op_load_T1_crb23_code, 14); + inc_code_ptr(14); +} +#endif + +DEFINE_GEN(gen_op_store_T1_crb23,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T1_crb23 +{ + static const uint8 op_store_T1_crb23_code[] = { + 0x8b, 0x95, 0x90, 0x03, 0x00, 0x00, 0x89, 0xf0, 0x83, 0xe0, 0x01, 0xc1, + 0xe0, 0x08, 0x81, 0xe2, 0xff, 0xfe, 0xff, 0xff, 0x09, 0xc2, 0x89, 0x95, + 0x90, 0x03, 0x00, 0x00 + }; + copy_block(op_store_T1_crb23_code, 28); + inc_code_ptr(28); +} +#endif + +DEFINE_GEN(gen_op_load_T0_crb24,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T0_crb24 +{ + static const uint8 op_load_T0_crb24_code[] = { + 0x8b, 0x85, 0x90, 0x03, 0x00, 0x00, 0xc1, 0xe8, 0x07, 0x89, 0xc3, 0x83, + 0xe3, 0x01 + }; + copy_block(op_load_T0_crb24_code, 14); + inc_code_ptr(14); +} +#endif + +DEFINE_GEN(gen_op_store_T0_crb24,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T0_crb24 +{ + static const uint8 op_store_T0_crb24_code[] = { + 0x8b, 0x95, 0x90, 0x03, 0x00, 0x00, 0x89, 0xd8, 0x83, 0xe0, 0x01, 0xc1, + 0xe0, 0x07, 0x81, 0xe2, 0x7f, 0xff, 0xff, 0xff, 0x09, 0xc2, 0x89, 0x95, + 0x90, 0x03, 0x00, 0x00 + }; + copy_block(op_store_T0_crb24_code, 28); + inc_code_ptr(28); +} +#endif + +DEFINE_GEN(gen_op_load_T1_crb24,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T1_crb24 +{ + static const uint8 op_load_T1_crb24_code[] = { + 0x8b, 0x85, 0x90, 0x03, 0x00, 0x00, 0xc1, 0xe8, 0x07, 0x89, 0xc6, 0x83, + 0xe6, 0x01 + }; + copy_block(op_load_T1_crb24_code, 14); + inc_code_ptr(14); +} +#endif + +DEFINE_GEN(gen_op_store_T1_crb24,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T1_crb24 +{ + static const uint8 op_store_T1_crb24_code[] = { + 0x8b, 0x95, 0x90, 0x03, 0x00, 0x00, 0x89, 0xf0, 0x83, 0xe0, 0x01, 0xc1, + 0xe0, 0x07, 0x81, 0xe2, 0x7f, 0xff, 0xff, 0xff, 0x09, 0xc2, 0x89, 0x95, + 0x90, 0x03, 0x00, 0x00 + }; + copy_block(op_store_T1_crb24_code, 28); + inc_code_ptr(28); +} +#endif + +DEFINE_GEN(gen_op_load_T0_crb25,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T0_crb25 +{ + static const uint8 op_load_T0_crb25_code[] = { + 0x8b, 0x85, 0x90, 0x03, 0x00, 0x00, 0xc1, 0xe8, 0x06, 0x89, 0xc3, 0x83, + 0xe3, 0x01 + }; + copy_block(op_load_T0_crb25_code, 14); + inc_code_ptr(14); +} +#endif + +DEFINE_GEN(gen_op_store_T0_crb25,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T0_crb25 +{ + static const uint8 op_store_T0_crb25_code[] = { + 0x8b, 0x95, 0x90, 0x03, 0x00, 0x00, 0x89, 0xd8, 0x83, 0xe0, 0x01, 0xc1, + 0xe0, 0x06, 0x83, 0xe2, 0xbf, 0x09, 0xc2, 0x89, 0x95, 0x90, 0x03, 0x00, + 0x00 + }; + copy_block(op_store_T0_crb25_code, 25); + inc_code_ptr(25); +} +#endif + +DEFINE_GEN(gen_op_load_T1_crb25,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T1_crb25 +{ + static const uint8 op_load_T1_crb25_code[] = { + 0x8b, 0x85, 0x90, 0x03, 0x00, 0x00, 0xc1, 0xe8, 0x06, 0x89, 0xc6, 0x83, + 0xe6, 0x01 + }; + copy_block(op_load_T1_crb25_code, 14); + inc_code_ptr(14); +} +#endif + +DEFINE_GEN(gen_op_store_T1_crb25,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T1_crb25 +{ + static const uint8 op_store_T1_crb25_code[] = { + 0x8b, 0x95, 0x90, 0x03, 0x00, 0x00, 0x89, 0xf0, 0x83, 0xe0, 0x01, 0xc1, + 0xe0, 0x06, 0x83, 0xe2, 0xbf, 0x09, 0xc2, 0x89, 0x95, 0x90, 0x03, 0x00, + 0x00 + }; + copy_block(op_store_T1_crb25_code, 25); + inc_code_ptr(25); +} +#endif + +DEFINE_GEN(gen_op_load_T0_crb26,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T0_crb26 +{ + static const uint8 op_load_T0_crb26_code[] = { + 0x8b, 0x85, 0x90, 0x03, 0x00, 0x00, 0xc1, 0xe8, 0x05, 0x89, 0xc3, 0x83, + 0xe3, 0x01 + }; + copy_block(op_load_T0_crb26_code, 14); + inc_code_ptr(14); +} +#endif + +DEFINE_GEN(gen_op_store_T0_crb26,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T0_crb26 +{ + static const uint8 op_store_T0_crb26_code[] = { + 0x8b, 0x95, 0x90, 0x03, 0x00, 0x00, 0x89, 0xd8, 0x83, 0xe0, 0x01, 0xc1, + 0xe0, 0x05, 0x83, 0xe2, 0xdf, 0x09, 0xc2, 0x89, 0x95, 0x90, 0x03, 0x00, + 0x00 + }; + copy_block(op_store_T0_crb26_code, 25); + inc_code_ptr(25); +} +#endif + +DEFINE_GEN(gen_op_load_T1_crb26,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T1_crb26 +{ + static const uint8 op_load_T1_crb26_code[] = { + 0x8b, 0x85, 0x90, 0x03, 0x00, 0x00, 0xc1, 0xe8, 0x05, 0x89, 0xc6, 0x83, + 0xe6, 0x01 + }; + copy_block(op_load_T1_crb26_code, 14); + inc_code_ptr(14); +} +#endif + +DEFINE_GEN(gen_op_store_T1_crb26,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T1_crb26 +{ + static const uint8 op_store_T1_crb26_code[] = { + 0x8b, 0x95, 0x90, 0x03, 0x00, 0x00, 0x89, 0xf0, 0x83, 0xe0, 0x01, 0xc1, + 0xe0, 0x05, 0x83, 0xe2, 0xdf, 0x09, 0xc2, 0x89, 0x95, 0x90, 0x03, 0x00, + 0x00 + }; + copy_block(op_store_T1_crb26_code, 25); + inc_code_ptr(25); +} +#endif + +DEFINE_GEN(gen_op_load_T0_crb27,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T0_crb27 +{ + static const uint8 op_load_T0_crb27_code[] = { + 0x8b, 0x85, 0x90, 0x03, 0x00, 0x00, 0xc1, 0xe8, 0x04, 0x89, 0xc3, 0x83, + 0xe3, 0x01 + }; + copy_block(op_load_T0_crb27_code, 14); + inc_code_ptr(14); +} +#endif + +DEFINE_GEN(gen_op_store_T0_crb27,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T0_crb27 +{ + static const uint8 op_store_T0_crb27_code[] = { + 0x8b, 0x95, 0x90, 0x03, 0x00, 0x00, 0x89, 0xd8, 0x83, 0xe0, 0x01, 0xc1, + 0xe0, 0x04, 0x83, 0xe2, 0xef, 0x09, 0xc2, 0x89, 0x95, 0x90, 0x03, 0x00, + 0x00 + }; + copy_block(op_store_T0_crb27_code, 25); + inc_code_ptr(25); +} +#endif + +DEFINE_GEN(gen_op_load_T1_crb27,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T1_crb27 +{ + static const uint8 op_load_T1_crb27_code[] = { + 0x8b, 0x85, 0x90, 0x03, 0x00, 0x00, 0xc1, 0xe8, 0x04, 0x89, 0xc6, 0x83, + 0xe6, 0x01 + }; + copy_block(op_load_T1_crb27_code, 14); + inc_code_ptr(14); +} +#endif + +DEFINE_GEN(gen_op_store_T1_crb27,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T1_crb27 +{ + static const uint8 op_store_T1_crb27_code[] = { + 0x8b, 0x95, 0x90, 0x03, 0x00, 0x00, 0x89, 0xf0, 0x83, 0xe0, 0x01, 0xc1, + 0xe0, 0x04, 0x83, 0xe2, 0xef, 0x09, 0xc2, 0x89, 0x95, 0x90, 0x03, 0x00, + 0x00 + }; + copy_block(op_store_T1_crb27_code, 25); + inc_code_ptr(25); +} +#endif + +DEFINE_GEN(gen_op_load_T0_crb28,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T0_crb28 +{ + static const uint8 op_load_T0_crb28_code[] = { + 0x8b, 0x85, 0x90, 0x03, 0x00, 0x00, 0xc1, 0xe8, 0x03, 0x89, 0xc3, 0x83, + 0xe3, 0x01 + }; + copy_block(op_load_T0_crb28_code, 14); + inc_code_ptr(14); +} +#endif + +DEFINE_GEN(gen_op_store_T0_crb28,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T0_crb28 +{ + static const uint8 op_store_T0_crb28_code[] = { + 0x8b, 0x95, 0x90, 0x03, 0x00, 0x00, 0x89, 0xd8, 0x83, 0xe0, 0x01, 0xc1, + 0xe0, 0x03, 0x83, 0xe2, 0xf7, 0x09, 0xc2, 0x89, 0x95, 0x90, 0x03, 0x00, + 0x00 + }; + copy_block(op_store_T0_crb28_code, 25); + inc_code_ptr(25); +} +#endif + +DEFINE_GEN(gen_op_load_T1_crb28,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T1_crb28 +{ + static const uint8 op_load_T1_crb28_code[] = { + 0x8b, 0x85, 0x90, 0x03, 0x00, 0x00, 0xc1, 0xe8, 0x03, 0x89, 0xc6, 0x83, + 0xe6, 0x01 + }; + copy_block(op_load_T1_crb28_code, 14); + inc_code_ptr(14); +} +#endif + +DEFINE_GEN(gen_op_store_T1_crb28,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T1_crb28 +{ + static const uint8 op_store_T1_crb28_code[] = { + 0x8b, 0x95, 0x90, 0x03, 0x00, 0x00, 0x89, 0xf0, 0x83, 0xe0, 0x01, 0xc1, + 0xe0, 0x03, 0x83, 0xe2, 0xf7, 0x09, 0xc2, 0x89, 0x95, 0x90, 0x03, 0x00, + 0x00 + }; + copy_block(op_store_T1_crb28_code, 25); + inc_code_ptr(25); +} +#endif + +DEFINE_GEN(gen_op_load_T0_crb29,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T0_crb29 +{ + static const uint8 op_load_T0_crb29_code[] = { + 0x8b, 0x85, 0x90, 0x03, 0x00, 0x00, 0xc1, 0xe8, 0x02, 0x89, 0xc3, 0x83, + 0xe3, 0x01 + }; + copy_block(op_load_T0_crb29_code, 14); + inc_code_ptr(14); +} +#endif + +DEFINE_GEN(gen_op_store_T0_crb29,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T0_crb29 +{ + static const uint8 op_store_T0_crb29_code[] = { + 0x8b, 0x95, 0x90, 0x03, 0x00, 0x00, 0x89, 0xd8, 0x83, 0xe0, 0x01, 0xc1, + 0xe0, 0x02, 0x83, 0xe2, 0xfb, 0x09, 0xc2, 0x89, 0x95, 0x90, 0x03, 0x00, + 0x00 + }; + copy_block(op_store_T0_crb29_code, 25); + inc_code_ptr(25); +} +#endif + +DEFINE_GEN(gen_op_load_T1_crb29,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T1_crb29 +{ + static const uint8 op_load_T1_crb29_code[] = { + 0x8b, 0x85, 0x90, 0x03, 0x00, 0x00, 0xc1, 0xe8, 0x02, 0x89, 0xc6, 0x83, + 0xe6, 0x01 + }; + copy_block(op_load_T1_crb29_code, 14); + inc_code_ptr(14); +} +#endif + +DEFINE_GEN(gen_op_store_T1_crb29,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T1_crb29 +{ + static const uint8 op_store_T1_crb29_code[] = { + 0x8b, 0x95, 0x90, 0x03, 0x00, 0x00, 0x89, 0xf0, 0x83, 0xe0, 0x01, 0xc1, + 0xe0, 0x02, 0x83, 0xe2, 0xfb, 0x09, 0xc2, 0x89, 0x95, 0x90, 0x03, 0x00, + 0x00 + }; + copy_block(op_store_T1_crb29_code, 25); + inc_code_ptr(25); +} +#endif + +DEFINE_GEN(gen_op_load_T0_crb30,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T0_crb30 +{ + static const uint8 op_load_T0_crb30_code[] = { + 0x8b, 0x85, 0x90, 0x03, 0x00, 0x00, 0xd1, 0xe8, 0x89, 0xc3, 0x83, 0xe3, + 0x01 + }; + copy_block(op_load_T0_crb30_code, 13); + inc_code_ptr(13); +} +#endif + +DEFINE_GEN(gen_op_store_T0_crb30,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T0_crb30 +{ + static const uint8 op_store_T0_crb30_code[] = { + 0x8b, 0x95, 0x90, 0x03, 0x00, 0x00, 0x89, 0xd8, 0x83, 0xe0, 0x01, 0x01, + 0xc0, 0x83, 0xe2, 0xfd, 0x09, 0xc2, 0x89, 0x95, 0x90, 0x03, 0x00, 0x00 + }; + copy_block(op_store_T0_crb30_code, 24); + inc_code_ptr(24); +} +#endif + +DEFINE_GEN(gen_op_load_T1_crb30,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T1_crb30 +{ + static const uint8 op_load_T1_crb30_code[] = { + 0x8b, 0x85, 0x90, 0x03, 0x00, 0x00, 0xd1, 0xe8, 0x89, 0xc6, 0x83, 0xe6, + 0x01 + }; + copy_block(op_load_T1_crb30_code, 13); + inc_code_ptr(13); +} +#endif + +DEFINE_GEN(gen_op_store_T1_crb30,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T1_crb30 +{ + static const uint8 op_store_T1_crb30_code[] = { + 0x8b, 0x95, 0x90, 0x03, 0x00, 0x00, 0x89, 0xf0, 0x83, 0xe0, 0x01, 0x01, + 0xc0, 0x83, 0xe2, 0xfd, 0x09, 0xc2, 0x89, 0x95, 0x90, 0x03, 0x00, 0x00 + }; + copy_block(op_store_T1_crb30_code, 24); + inc_code_ptr(24); +} +#endif + +DEFINE_GEN(gen_op_load_T0_crb31,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T0_crb31 +{ + static const uint8 op_load_T0_crb31_code[] = { + 0x8b, 0x9d, 0x90, 0x03, 0x00, 0x00, 0x83, 0xe3, 0x01 + }; + copy_block(op_load_T0_crb31_code, 9); + inc_code_ptr(9); +} +#endif + +DEFINE_GEN(gen_op_store_T0_crb31,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T0_crb31 +{ + static const uint8 op_store_T0_crb31_code[] = { + 0x8b, 0x85, 0x90, 0x03, 0x00, 0x00, 0x89, 0xda, 0x83, 0xe2, 0x01, 0x83, + 0xe0, 0xfe, 0x09, 0xd0, 0x89, 0x85, 0x90, 0x03, 0x00, 0x00 + }; + copy_block(op_store_T0_crb31_code, 22); + inc_code_ptr(22); +} +#endif + +DEFINE_GEN(gen_op_load_T1_crb31,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T1_crb31 +{ + static const uint8 op_load_T1_crb31_code[] = { + 0x8b, 0xb5, 0x90, 0x03, 0x00, 0x00, 0x83, 0xe6, 0x01 + }; + copy_block(op_load_T1_crb31_code, 9); + inc_code_ptr(9); +} +#endif + +DEFINE_GEN(gen_op_store_T1_crb31,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T1_crb31 +{ + static const uint8 op_store_T1_crb31_code[] = { + 0x8b, 0x85, 0x90, 0x03, 0x00, 0x00, 0x89, 0xf2, 0x83, 0xe2, 0x01, 0x83, + 0xe0, 0xfe, 0x09, 0xd0, 0x89, 0x85, 0x90, 0x03, 0x00, 0x00 + }; + copy_block(op_store_T1_crb31_code, 22); + inc_code_ptr(22); +} +#endif + +DEFINE_GEN(gen_op_load_T0_cr0,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T0_cr0 +{ + static const uint8 op_load_T0_cr0_code[] = { + 0x8b, 0x85, 0x90, 0x03, 0x00, 0x00, 0x89, 0xc3, 0xc1, 0xeb, 0x1c + }; + copy_block(op_load_T0_cr0_code, 11); + inc_code_ptr(11); +} +#endif + +DEFINE_GEN(gen_op_store_T0_cr0,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T0_cr0 +{ + static const uint8 op_store_T0_cr0_code[] = { + 0x8b, 0x95, 0x90, 0x03, 0x00, 0x00, 0x89, 0xd9, 0xc1, 0xe1, 0x1c, 0x81, + 0xe2, 0xff, 0xff, 0xff, 0x0f, 0x09, 0xca, 0x89, 0x95, 0x90, 0x03, 0x00, + 0x00 + }; + copy_block(op_store_T0_cr0_code, 25); + inc_code_ptr(25); +} +#endif + +DEFINE_GEN(gen_op_load_T0_cr1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T0_cr1 +{ + static const uint8 op_load_T0_cr1_code[] = { + 0x0f, 0xb6, 0x85, 0x93, 0x03, 0x00, 0x00, 0x89, 0xc3, 0x83, 0xe3, 0x0f + }; + copy_block(op_load_T0_cr1_code, 12); + inc_code_ptr(12); +} +#endif + +DEFINE_GEN(gen_op_store_T0_cr1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T0_cr1 +{ + static const uint8 op_store_T0_cr1_code[] = { + 0x8b, 0x95, 0x90, 0x03, 0x00, 0x00, 0x89, 0xd9, 0xc1, 0xe1, 0x18, 0x81, + 0xe2, 0xff, 0xff, 0xff, 0xf0, 0x09, 0xca, 0x89, 0x95, 0x90, 0x03, 0x00, + 0x00 + }; + copy_block(op_store_T0_cr1_code, 25); + inc_code_ptr(25); +} +#endif + +DEFINE_GEN(gen_op_load_T0_cr2,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T0_cr2 +{ + static const uint8 op_load_T0_cr2_code[] = { + 0x8b, 0x85, 0x90, 0x03, 0x00, 0x00, 0xc1, 0xe8, 0x14, 0x89, 0xc3, 0x83, + 0xe3, 0x0f + }; + copy_block(op_load_T0_cr2_code, 14); + inc_code_ptr(14); +} +#endif + +DEFINE_GEN(gen_op_store_T0_cr2,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T0_cr2 +{ + static const uint8 op_store_T0_cr2_code[] = { + 0x8b, 0x95, 0x90, 0x03, 0x00, 0x00, 0x89, 0xd9, 0xc1, 0xe1, 0x14, 0x81, + 0xe2, 0xff, 0xff, 0x0f, 0xff, 0x09, 0xca, 0x89, 0x95, 0x90, 0x03, 0x00, + 0x00 + }; + copy_block(op_store_T0_cr2_code, 25); + inc_code_ptr(25); +} +#endif + +DEFINE_GEN(gen_op_load_T0_cr3,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T0_cr3 +{ + static const uint8 op_load_T0_cr3_code[] = { + 0x0f, 0xb7, 0x85, 0x92, 0x03, 0x00, 0x00, 0x89, 0xc3, 0x83, 0xe3, 0x0f + }; + copy_block(op_load_T0_cr3_code, 12); + inc_code_ptr(12); +} +#endif + +DEFINE_GEN(gen_op_store_T0_cr3,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T0_cr3 +{ + static const uint8 op_store_T0_cr3_code[] = { + 0x8b, 0x95, 0x90, 0x03, 0x00, 0x00, 0x89, 0xd9, 0xc1, 0xe1, 0x10, 0x81, + 0xe2, 0xff, 0xff, 0xf0, 0xff, 0x09, 0xca, 0x89, 0x95, 0x90, 0x03, 0x00, + 0x00 + }; + copy_block(op_store_T0_cr3_code, 25); + inc_code_ptr(25); +} +#endif + +DEFINE_GEN(gen_op_load_T0_cr4,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T0_cr4 +{ + static const uint8 op_load_T0_cr4_code[] = { + 0x8b, 0x85, 0x90, 0x03, 0x00, 0x00, 0xc1, 0xe8, 0x0c, 0x89, 0xc3, 0x83, + 0xe3, 0x0f + }; + copy_block(op_load_T0_cr4_code, 14); + inc_code_ptr(14); +} +#endif + +DEFINE_GEN(gen_op_store_T0_cr4,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T0_cr4 +{ + static const uint8 op_store_T0_cr4_code[] = { + 0x8b, 0x95, 0x90, 0x03, 0x00, 0x00, 0x89, 0xd9, 0xc1, 0xe1, 0x0c, 0x81, + 0xe2, 0xff, 0x0f, 0xff, 0xff, 0x09, 0xca, 0x89, 0x95, 0x90, 0x03, 0x00, + 0x00 + }; + copy_block(op_store_T0_cr4_code, 25); + inc_code_ptr(25); +} +#endif + +DEFINE_GEN(gen_op_load_T0_cr5,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T0_cr5 +{ + static const uint8 op_load_T0_cr5_code[] = { + 0x8b, 0x85, 0x90, 0x03, 0x00, 0x00, 0xc1, 0xe8, 0x08, 0x89, 0xc3, 0x83, + 0xe3, 0x0f + }; + copy_block(op_load_T0_cr5_code, 14); + inc_code_ptr(14); +} +#endif + +DEFINE_GEN(gen_op_store_T0_cr5,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T0_cr5 +{ + static const uint8 op_store_T0_cr5_code[] = { + 0x8b, 0x95, 0x90, 0x03, 0x00, 0x00, 0x89, 0xd9, 0xc1, 0xe1, 0x08, 0x81, + 0xe2, 0xff, 0xf0, 0xff, 0xff, 0x09, 0xca, 0x89, 0x95, 0x90, 0x03, 0x00, + 0x00 + }; + copy_block(op_store_T0_cr5_code, 25); + inc_code_ptr(25); +} +#endif + +DEFINE_GEN(gen_op_load_T0_cr6,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T0_cr6 +{ + static const uint8 op_load_T0_cr6_code[] = { + 0x8b, 0x85, 0x90, 0x03, 0x00, 0x00, 0xc1, 0xe8, 0x04, 0x89, 0xc3, 0x83, + 0xe3, 0x0f + }; + copy_block(op_load_T0_cr6_code, 14); + inc_code_ptr(14); +} +#endif + +DEFINE_GEN(gen_op_store_T0_cr6,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T0_cr6 +{ + static const uint8 op_store_T0_cr6_code[] = { + 0x8b, 0x95, 0x90, 0x03, 0x00, 0x00, 0x89, 0xd9, 0xc1, 0xe1, 0x04, 0x81, + 0xe2, 0x0f, 0xff, 0xff, 0xff, 0x09, 0xca, 0x89, 0x95, 0x90, 0x03, 0x00, + 0x00 + }; + copy_block(op_store_T0_cr6_code, 25); + inc_code_ptr(25); +} +#endif + +DEFINE_GEN(gen_op_load_T0_cr7,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T0_cr7 +{ + static const uint8 op_load_T0_cr7_code[] = { + 0x8b, 0x9d, 0x90, 0x03, 0x00, 0x00, 0x83, 0xe3, 0x0f + }; + copy_block(op_load_T0_cr7_code, 9); + inc_code_ptr(9); +} +#endif + +DEFINE_GEN(gen_op_store_T0_cr7,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T0_cr7 +{ + static const uint8 op_store_T0_cr7_code[] = { + 0x8b, 0x85, 0x90, 0x03, 0x00, 0x00, 0x83, 0xe0, 0xf0, 0x09, 0xd8, 0x89, + 0x85, 0x90, 0x03, 0x00, 0x00 + }; + copy_block(op_store_T0_cr7_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_mtcrf_T0_im,void,(long param1)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_mtcrf_T0_im +{ + static const uint8 op_mtcrf_T0_im_code[] = { + 0x8b, 0x8d, 0x90, 0x03, 0x00, 0x00, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x89, + 0xda, 0xf7, 0xd0, 0x81, 0xe2, 0x00, 0x00, 0x00, 0x00, 0x21, 0xc8, 0x09, + 0xd0, 0x89, 0x85, 0x90, 0x03, 0x00, 0x00 + }; + copy_block(op_mtcrf_T0_im_code, 31); + *(uint32_t *)(code_ptr() + 7) = param1 + 0; + *(uint32_t *)(code_ptr() + 17) = param1 + 0; + inc_code_ptr(31); +} +#endif + +DEFINE_GEN(gen_op_fmov_F0_F1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_fmov_F0_F1 +{ + static const uint8 op_fmov_F0_F1_code[] = { + 0x8b, 0x06, 0x8b, 0x56, 0x04, 0x89, 0x03, 0x89, 0x53, 0x04 + }; + copy_block(op_fmov_F0_F1_code, 10); + inc_code_ptr(10); +} +#endif + +DEFINE_GEN(gen_op_fmov_F0_F2,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_fmov_F0_F2 +{ + static const uint8 op_fmov_F0_F2_code[] = { + 0x8b, 0x07, 0x8b, 0x57, 0x04, 0x89, 0x03, 0x89, 0x53, 0x04 + }; + copy_block(op_fmov_F0_F2_code, 10); + inc_code_ptr(10); +} +#endif + +DEFINE_GEN(gen_op_fmov_F1_F0,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_fmov_F1_F0 +{ + static const uint8 op_fmov_F1_F0_code[] = { + 0x8b, 0x03, 0x8b, 0x53, 0x04, 0x89, 0x06, 0x89, 0x56, 0x04 + }; + copy_block(op_fmov_F1_F0_code, 10); + inc_code_ptr(10); +} +#endif + +DEFINE_GEN(gen_op_fmov_F1_F2,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_fmov_F1_F2 +{ + static const uint8 op_fmov_F1_F2_code[] = { + 0x8b, 0x07, 0x8b, 0x57, 0x04, 0x89, 0x06, 0x89, 0x56, 0x04 + }; + copy_block(op_fmov_F1_F2_code, 10); + inc_code_ptr(10); +} +#endif + +DEFINE_GEN(gen_op_fmov_F2_F0,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_fmov_F2_F0 +{ + static const uint8 op_fmov_F2_F0_code[] = { + 0x8b, 0x03, 0x8b, 0x53, 0x04, 0x89, 0x07, 0x89, 0x57, 0x04 + }; + copy_block(op_fmov_F2_F0_code, 10); + inc_code_ptr(10); +} +#endif + +DEFINE_GEN(gen_op_fmov_F2_F1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_fmov_F2_F1 +{ + static const uint8 op_fmov_F2_F1_code[] = { + 0x8b, 0x06, 0x8b, 0x56, 0x04, 0x89, 0x07, 0x89, 0x57, 0x04 + }; + copy_block(op_fmov_F2_F1_code, 10); + inc_code_ptr(10); +} +#endif + +DEFINE_GEN(gen_op_fmov_FD_F0,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_fmov_FD_F0 +{ + static const uint8 op_fmov_FD_F0_code[] = { + 0x8b, 0x03, 0x8b, 0x53, 0x04, 0x89, 0x85, 0x40, 0x08, 0x0e, 0x00, 0x89, + 0x95, 0x44, 0x08, 0x0e, 0x00 + }; + copy_block(op_fmov_FD_F0_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_fmov_FD_F1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_fmov_FD_F1 +{ + static const uint8 op_fmov_FD_F1_code[] = { + 0x8b, 0x06, 0x8b, 0x56, 0x04, 0x89, 0x85, 0x40, 0x08, 0x0e, 0x00, 0x89, + 0x95, 0x44, 0x08, 0x0e, 0x00 + }; + copy_block(op_fmov_FD_F1_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_fmov_FD_F2,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_fmov_FD_F2 +{ + static const uint8 op_fmov_FD_F2_code[] = { + 0x8b, 0x07, 0x8b, 0x57, 0x04, 0x89, 0x85, 0x40, 0x08, 0x0e, 0x00, 0x89, + 0x95, 0x44, 0x08, 0x0e, 0x00 + }; + copy_block(op_fmov_FD_F2_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_fabs_FD_F0,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_fabs_FD_F0 +{ + static const uint8 op_fabs_FD_F0_code[] = { + 0xdd, 0x03, 0x8d, 0x85, 0x40, 0x08, 0x0e, 0x00, 0xd9, 0xe1, 0xdd, 0x18 + }; + copy_block(op_fabs_FD_F0_code, 12); + inc_code_ptr(12); +} +#endif + +DEFINE_GEN(gen_op_fneg_FD_F0,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_fneg_FD_F0 +{ + static const uint8 op_fneg_FD_F0_code[] = { + 0xdd, 0x03, 0x8d, 0x85, 0x40, 0x08, 0x0e, 0x00, 0xd9, 0xe0, 0xdd, 0x18 + }; + copy_block(op_fneg_FD_F0_code, 12); + inc_code_ptr(12); +} +#endif + +DEFINE_GEN(gen_op_fnabs_FD_F0,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_fnabs_FD_F0 +{ + static const uint8 op_fnabs_FD_F0_code[] = { + 0xdd, 0x03, 0x8d, 0x85, 0x40, 0x08, 0x0e, 0x00, 0xd9, 0xe1, 0xd9, 0xe0, + 0xdd, 0x18 + }; + copy_block(op_fnabs_FD_F0_code, 14); + inc_code_ptr(14); +} +#endif + +DEFINE_GEN(gen_op_fadd_FD_F0_F1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_fadd_FD_F0_F1 +{ + static const uint8 op_fadd_FD_F0_F1_code[] = { + 0xdd, 0x06, 0xdc, 0x03, 0xdd, 0x9d, 0x40, 0x08, 0x0e, 0x00 + }; + copy_block(op_fadd_FD_F0_F1_code, 10); + inc_code_ptr(10); +} +#endif + +DEFINE_GEN(gen_op_fsub_FD_F0_F1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_fsub_FD_F0_F1 +{ + static const uint8 op_fsub_FD_F0_F1_code[] = { + 0xdd, 0x06, 0xdc, 0x2b, 0xdd, 0x9d, 0x40, 0x08, 0x0e, 0x00 + }; + copy_block(op_fsub_FD_F0_F1_code, 10); + inc_code_ptr(10); +} +#endif + +DEFINE_GEN(gen_op_fmul_FD_F0_F1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_fmul_FD_F0_F1 +{ + static const uint8 op_fmul_FD_F0_F1_code[] = { + 0xdd, 0x06, 0xdc, 0x0b, 0xdd, 0x9d, 0x40, 0x08, 0x0e, 0x00 + }; + copy_block(op_fmul_FD_F0_F1_code, 10); + inc_code_ptr(10); +} +#endif + +DEFINE_GEN(gen_op_fdiv_FD_F0_F1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_fdiv_FD_F0_F1 +{ + static const uint8 op_fdiv_FD_F0_F1_code[] = { + 0xdd, 0x06, 0xdc, 0x3b, 0xdd, 0x9d, 0x40, 0x08, 0x0e, 0x00 + }; + copy_block(op_fdiv_FD_F0_F1_code, 10); + inc_code_ptr(10); +} +#endif + +DEFINE_GEN(gen_op_fmadd_FD_F0_F1_F2,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_fmadd_FD_F0_F1_F2 +{ + static const uint8 op_fmadd_FD_F0_F1_F2_code[] = { + 0xdd, 0x06, 0xdc, 0x0b, 0xdc, 0x07, 0xdd, 0x9d, 0x40, 0x08, 0x0e, 0x00 + }; + copy_block(op_fmadd_FD_F0_F1_F2_code, 12); + inc_code_ptr(12); +} +#endif + +DEFINE_GEN(gen_op_fmsub_FD_F0_F1_F2,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_fmsub_FD_F0_F1_F2 +{ + static const uint8 op_fmsub_FD_F0_F1_F2_code[] = { + 0xdd, 0x06, 0xdc, 0x0b, 0xdc, 0x27, 0xdd, 0x9d, 0x40, 0x08, 0x0e, 0x00 + }; + copy_block(op_fmsub_FD_F0_F1_F2_code, 12); + inc_code_ptr(12); +} +#endif + +DEFINE_GEN(gen_op_fnmadd_FD_F0_F1_F2,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_fnmadd_FD_F0_F1_F2 +{ + static const uint8 op_fnmadd_FD_F0_F1_F2_code[] = { + 0xdd, 0x06, 0x8d, 0x85, 0x40, 0x08, 0x0e, 0x00, 0xdc, 0x0b, 0xdc, 0x07, + 0xd9, 0xe0, 0xdd, 0x18 + }; + copy_block(op_fnmadd_FD_F0_F1_F2_code, 16); + inc_code_ptr(16); +} +#endif + +DEFINE_GEN(gen_op_fnmsub_FD_F0_F1_F2,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_fnmsub_FD_F0_F1_F2 +{ + static const uint8 op_fnmsub_FD_F0_F1_F2_code[] = { + 0xdd, 0x06, 0x8d, 0x85, 0x40, 0x08, 0x0e, 0x00, 0xdc, 0x0b, 0xdc, 0x27, + 0xd9, 0xe0, 0xdd, 0x18 + }; + copy_block(op_fnmsub_FD_F0_F1_F2_code, 16); + inc_code_ptr(16); +} +#endif + +DEFINE_GEN(gen_op_fadds_FD_F0_F1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_fadds_FD_F0_F1 +{ + static const uint8 op_fadds_FD_F0_F1_code[] = { + 0x83, 0xec, 0x04, 0xdd, 0x06, 0xdc, 0x03, 0xd9, 0x1c, 0x24, 0xd9, 0x04, + 0x24, 0xdd, 0x9d, 0x40, 0x08, 0x0e, 0x00, 0x58 + }; + copy_block(op_fadds_FD_F0_F1_code, 20); + inc_code_ptr(20); +} +#endif + +DEFINE_GEN(gen_op_fsubs_FD_F0_F1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_fsubs_FD_F0_F1 +{ + static const uint8 op_fsubs_FD_F0_F1_code[] = { + 0x83, 0xec, 0x04, 0xdd, 0x06, 0xdc, 0x2b, 0xd9, 0x1c, 0x24, 0xd9, 0x04, + 0x24, 0xdd, 0x9d, 0x40, 0x08, 0x0e, 0x00, 0x58 + }; + copy_block(op_fsubs_FD_F0_F1_code, 20); + inc_code_ptr(20); +} +#endif + +DEFINE_GEN(gen_op_fmuls_FD_F0_F1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_fmuls_FD_F0_F1 +{ + static const uint8 op_fmuls_FD_F0_F1_code[] = { + 0x83, 0xec, 0x04, 0xdd, 0x06, 0xdc, 0x0b, 0xd9, 0x1c, 0x24, 0xd9, 0x04, + 0x24, 0xdd, 0x9d, 0x40, 0x08, 0x0e, 0x00, 0x58 + }; + copy_block(op_fmuls_FD_F0_F1_code, 20); + inc_code_ptr(20); +} +#endif + +DEFINE_GEN(gen_op_fdivs_FD_F0_F1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_fdivs_FD_F0_F1 +{ + static const uint8 op_fdivs_FD_F0_F1_code[] = { + 0x83, 0xec, 0x04, 0xdd, 0x06, 0xdc, 0x3b, 0xd9, 0x1c, 0x24, 0xd9, 0x04, + 0x24, 0xdd, 0x9d, 0x40, 0x08, 0x0e, 0x00, 0x58 + }; + copy_block(op_fdivs_FD_F0_F1_code, 20); + inc_code_ptr(20); +} +#endif + +DEFINE_GEN(gen_op_fmadds_FD_F0_F1_F2,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_fmadds_FD_F0_F1_F2 +{ + static const uint8 op_fmadds_FD_F0_F1_F2_code[] = { + 0x83, 0xec, 0x04, 0xdd, 0x06, 0xdc, 0x0b, 0xdc, 0x07, 0xd9, 0x1c, 0x24, + 0xd9, 0x04, 0x24, 0xdd, 0x9d, 0x40, 0x08, 0x0e, 0x00, 0x58 + }; + copy_block(op_fmadds_FD_F0_F1_F2_code, 22); + inc_code_ptr(22); +} +#endif + +DEFINE_GEN(gen_op_fmsubs_FD_F0_F1_F2,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_fmsubs_FD_F0_F1_F2 +{ + static const uint8 op_fmsubs_FD_F0_F1_F2_code[] = { + 0x83, 0xec, 0x04, 0xdd, 0x06, 0xdc, 0x0b, 0xdc, 0x27, 0xd9, 0x1c, 0x24, + 0xd9, 0x04, 0x24, 0xdd, 0x9d, 0x40, 0x08, 0x0e, 0x00, 0x58 + }; + copy_block(op_fmsubs_FD_F0_F1_F2_code, 22); + inc_code_ptr(22); +} +#endif + +DEFINE_GEN(gen_op_fnmadds_FD_F0_F1_F2,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_fnmadds_FD_F0_F1_F2 +{ + static const uint8 op_fnmadds_FD_F0_F1_F2_code[] = { + 0x83, 0xec, 0x04, 0xdd, 0x06, 0xdc, 0x0b, 0xdc, 0x07, 0xd9, 0xe0, 0xd9, + 0x1c, 0x24, 0xd9, 0x04, 0x24, 0xdd, 0x9d, 0x40, 0x08, 0x0e, 0x00, 0x5a + }; + copy_block(op_fnmadds_FD_F0_F1_F2_code, 24); + inc_code_ptr(24); +} +#endif + +DEFINE_GEN(gen_op_fnmsubs_FD_F0_F1_F2,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_fnmsubs_FD_F0_F1_F2 +{ + static const uint8 op_fnmsubs_FD_F0_F1_F2_code[] = { + 0x83, 0xec, 0x04, 0xdd, 0x06, 0xdc, 0x0b, 0xdc, 0x27, 0xd9, 0xe0, 0xd9, + 0x1c, 0x24, 0xd9, 0x04, 0x24, 0xdd, 0x9d, 0x40, 0x08, 0x0e, 0x00, 0x59 + }; + copy_block(op_fnmsubs_FD_F0_F1_F2_code, 24); + inc_code_ptr(24); +} +#endif + +DEFINE_GEN(gen_op_load_T0_VRSAVE,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T0_VRSAVE +{ + static const uint8 op_load_T0_VRSAVE_code[] = { + 0x8b, 0x9d, 0x9c, 0x03, 0x00, 0x00 + }; + copy_block(op_load_T0_VRSAVE_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_T0_VRSAVE,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T0_VRSAVE +{ + static const uint8 op_store_T0_VRSAVE_code[] = { + 0x89, 0x9d, 0x9c, 0x03, 0x00, 0x00 + }; + copy_block(op_store_T0_VRSAVE_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_T0_XER,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T0_XER +{ + static const uint8 op_load_T0_XER_code[] = { + 0x0f, 0xb6, 0x95, 0x94, 0x03, 0x00, 0x00, 0x8d, 0x8d, 0x94, 0x03, 0x00, + 0x00, 0x0f, 0xb6, 0x41, 0x01, 0xc1, 0xe2, 0x1f, 0xc1, 0xe0, 0x1e, 0x09, + 0xc2, 0x0f, 0xb6, 0x41, 0x02, 0xc1, 0xe0, 0x1d, 0x09, 0xc2, 0x0f, 0xb6, + 0x41, 0x03, 0x89, 0xd3, 0x09, 0xc3 + }; + copy_block(op_load_T0_XER_code, 42); + inc_code_ptr(42); +} +#endif + +DEFINE_GEN(gen_op_load_T0_PC,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T0_PC +{ + static const uint8 op_load_T0_PC_code[] = { + 0x8b, 0x9d, 0xac, 0x03, 0x00, 0x00 + }; + copy_block(op_load_T0_PC_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_T0_PC,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T0_PC +{ + static const uint8 op_store_T0_PC_code[] = { + 0x89, 0x9d, 0xac, 0x03, 0x00, 0x00 + }; + copy_block(op_store_T0_PC_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_set_PC_im,void,(long param1)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_set_PC_im +{ + static const uint8 op_set_PC_im_code[] = { + 0xb8, 0x00, 0x00, 0x00, 0x00, 0x89, 0x85, 0xac, 0x03, 0x00, 0x00 + }; + copy_block(op_set_PC_im_code, 11); + *(uint32_t *)(code_ptr() + 1) = param1 + 0; + inc_code_ptr(11); +} +#endif + +DEFINE_GEN(gen_op_set_PC_T0,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_set_PC_T0 +{ + static const uint8 op_set_PC_T0_code[] = { + 0x89, 0x9d, 0xac, 0x03, 0x00, 0x00 + }; + copy_block(op_set_PC_T0_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_inc_PC,void,(long param1)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_inc_PC +{ + static const uint8 op_inc_PC_code[] = { + 0x81, 0x85, 0xac, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + }; + copy_block(op_inc_PC_code, 10); + *(uint32_t *)(code_ptr() + 6) = param1 + 0; + inc_code_ptr(10); +} +#endif + +DEFINE_GEN(gen_op_load_T0_LR,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T0_LR +{ + static const uint8 op_load_T0_LR_code[] = { + 0x8b, 0x9d, 0xa4, 0x03, 0x00, 0x00 + }; + copy_block(op_load_T0_LR_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_T0_LR,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T0_LR +{ + static const uint8 op_store_T0_LR_code[] = { + 0x89, 0x9d, 0xa4, 0x03, 0x00, 0x00 + }; + copy_block(op_store_T0_LR_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_T0_CTR,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T0_CTR +{ + static const uint8 op_load_T0_CTR_code[] = { + 0x8b, 0x9d, 0xa8, 0x03, 0x00, 0x00 + }; + copy_block(op_load_T0_CTR_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_T0_CTR,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T0_CTR +{ + static const uint8 op_store_T0_CTR_code[] = { + 0x89, 0x9d, 0xa8, 0x03, 0x00, 0x00 + }; + copy_block(op_store_T0_CTR_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_store_im_LR,void,(long param1)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_im_LR +{ + static const uint8 op_store_im_LR_code[] = { + 0xb8, 0x00, 0x00, 0x00, 0x00, 0x89, 0x85, 0xa4, 0x03, 0x00, 0x00 + }; + copy_block(op_store_im_LR_code, 11); + *(uint32_t *)(code_ptr() + 1) = param1 + 0; + inc_code_ptr(11); +} +#endif + +DEFINE_GEN(gen_op_load_T0_CTR_aligned,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T0_CTR_aligned +{ + static const uint8 op_load_T0_CTR_aligned_code[] = { + 0x8b, 0x9d, 0xa8, 0x03, 0x00, 0x00, 0x83, 0xe3, 0xfc + }; + copy_block(op_load_T0_CTR_aligned_code, 9); + inc_code_ptr(9); +} +#endif + +DEFINE_GEN(gen_op_load_T0_LR_aligned,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_T0_LR_aligned +{ + static const uint8 op_load_T0_LR_aligned_code[] = { + 0x8b, 0x9d, 0xa4, 0x03, 0x00, 0x00, 0x83, 0xe3, 0xfc + }; + copy_block(op_load_T0_LR_aligned_code, 9); + inc_code_ptr(9); +} +#endif + +DEFINE_GEN(gen_op_spcflags_init,void,(long param1)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_spcflags_init +{ + static const uint8 op_spcflags_init_code[] = { + 0x8d, 0x95, 0xb0, 0x03, 0x00, 0x00, 0x83, 0xec, 0x04, 0xb9, 0x01, 0x00, + 0x00, 0x00, 0x89, 0x14, 0x24, 0x8d, 0x95, 0xb4, 0x03, 0x00, 0x00, 0x89, + 0xf6, 0x8d, 0xbc, 0x27, 0x00, 0x00, 0x00, 0x00, 0x89, 0xc8, 0x87, 0x02, + 0x85, 0xc0, 0x75, 0xf8, 0x8b, 0x04, 0x24, 0x81, 0x08, 0x00, 0x00, 0x00, + 0x00, 0xc7, 0x40, 0x04, 0x00, 0x00, 0x00, 0x00, 0x58 + }; + copy_block(op_spcflags_init_code, 57); + *(uint32_t *)(code_ptr() + 45) = param1 + 0; + inc_code_ptr(57); +} +#endif + +DEFINE_GEN(gen_op_spcflags_set,void,(long param1)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_spcflags_set +{ + static const uint8 op_spcflags_set_code[] = { + 0x8d, 0x95, 0xb0, 0x03, 0x00, 0x00, 0x83, 0xec, 0x04, 0xb9, 0x01, 0x00, + 0x00, 0x00, 0x89, 0x14, 0x24, 0x8d, 0x95, 0xb4, 0x03, 0x00, 0x00, 0x89, + 0xf6, 0x8d, 0xbc, 0x27, 0x00, 0x00, 0x00, 0x00, 0x89, 0xc8, 0x87, 0x02, + 0x85, 0xc0, 0x75, 0xf8, 0x8b, 0x04, 0x24, 0x81, 0x08, 0x00, 0x00, 0x00, + 0x00, 0xc7, 0x40, 0x04, 0x00, 0x00, 0x00, 0x00, 0x58 + }; + copy_block(op_spcflags_set_code, 57); + *(uint32_t *)(code_ptr() + 45) = param1 + 0; + inc_code_ptr(57); +} +#endif + +DEFINE_GEN(gen_op_spcflags_clear,void,(long param1)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_spcflags_clear +{ + static const uint8 op_spcflags_clear_code[] = { + 0x83, 0xec, 0x08, 0x8d, 0x95, 0xb0, 0x03, 0x00, 0x00, 0xb9, 0x01, 0x00, + 0x00, 0x00, 0x89, 0x54, 0x24, 0x04, 0x8d, 0x95, 0xb4, 0x03, 0x00, 0x00, + 0xc7, 0x04, 0x24, 0x00, 0x00, 0x00, 0x00, 0x90, 0x89, 0xc8, 0x87, 0x02, + 0x85, 0xc0, 0x75, 0xf8, 0xf7, 0x14, 0x24, 0x8b, 0x44, 0x24, 0x04, 0x8b, + 0x14, 0x24, 0x21, 0x10, 0xc7, 0x40, 0x04, 0x00, 0x00, 0x00, 0x00, 0x83, + 0xc4, 0x08 + }; + copy_block(op_spcflags_clear_code, 62); + *(uint32_t *)(code_ptr() + 27) = param1 + 0; + inc_code_ptr(62); +} +#endif + +DEFINE_GEN(gen_op_spcflags_check,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_spcflags_check +{ + static const uint8 op_spcflags_check_code[] = { + 0x8b, 0x85, 0xb0, 0x03, 0x00, 0x00, 0x85, 0xc0, 0x75, 0x05, 0xe9, 0x00, + 0x00, 0x00, 0x00 + }; + copy_block(op_spcflags_check_code, 15); + jmp_addr[0] = code_ptr() + 11; + inc_code_ptr(15); +} +#endif + +DEFINE_GEN(gen_op_prep_branch_bo_0000,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_prep_branch_bo_0000 +{ + static const uint8 op_prep_branch_bo_0000_code[] = { + 0x8b, 0x85, 0xa8, 0x03, 0x00, 0x00, 0x85, 0xf6, 0x0f, 0x94, 0xc1, 0x31, + 0xd2, 0x48, 0x85, 0xc0, 0x89, 0x85, 0xa8, 0x03, 0x00, 0x00, 0x89, 0xc7, + 0x74, 0x16, 0x84, 0xc9, 0x74, 0x12, 0xba, 0x01, 0x00, 0x00, 0x00, 0x8d, + 0xb6, 0x00, 0x00, 0x00, 0x00, 0x8d, 0xbc, 0x27, 0x00, 0x00, 0x00, 0x00, + 0x89, 0xd6 + }; + copy_block(op_prep_branch_bo_0000_code, 50); + inc_code_ptr(50); +} +#endif + +DEFINE_GEN(gen_op_prep_branch_bo_0001,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_prep_branch_bo_0001 +{ + static const uint8 op_prep_branch_bo_0001_code[] = { + 0x8b, 0x85, 0xa8, 0x03, 0x00, 0x00, 0x85, 0xf6, 0x0f, 0x94, 0xc1, 0x31, + 0xd2, 0x48, 0x85, 0xc0, 0x89, 0x85, 0xa8, 0x03, 0x00, 0x00, 0x89, 0xc7, + 0x75, 0x16, 0x84, 0xc9, 0x74, 0x12, 0xba, 0x01, 0x00, 0x00, 0x00, 0x8d, + 0xb6, 0x00, 0x00, 0x00, 0x00, 0x8d, 0xbc, 0x27, 0x00, 0x00, 0x00, 0x00, + 0x89, 0xd6 + }; + copy_block(op_prep_branch_bo_0001_code, 50); + inc_code_ptr(50); +} +#endif + +DEFINE_GEN(gen_op_prep_branch_bo_001x,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_prep_branch_bo_001x +{ + static const uint8 op_prep_branch_bo_001x_code[] = { + 0x31, 0xc0, 0x85, 0xf6, 0x0f, 0x94, 0xc0, 0x89, 0xc6 + }; + copy_block(op_prep_branch_bo_001x_code, 9); + inc_code_ptr(9); +} +#endif + +DEFINE_GEN(gen_op_prep_branch_bo_0100,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_prep_branch_bo_0100 +{ + static const uint8 op_prep_branch_bo_0100_code[] = { + 0x8b, 0x85, 0xa8, 0x03, 0x00, 0x00, 0x85, 0xf6, 0x0f, 0x95, 0xc1, 0x31, + 0xd2, 0x48, 0x85, 0xc0, 0x89, 0x85, 0xa8, 0x03, 0x00, 0x00, 0x89, 0xc7, + 0x74, 0x16, 0x84, 0xc9, 0x74, 0x12, 0xba, 0x01, 0x00, 0x00, 0x00, 0x8d, + 0xb6, 0x00, 0x00, 0x00, 0x00, 0x8d, 0xbc, 0x27, 0x00, 0x00, 0x00, 0x00, + 0x89, 0xd6 + }; + copy_block(op_prep_branch_bo_0100_code, 50); + inc_code_ptr(50); +} +#endif + +DEFINE_GEN(gen_op_prep_branch_bo_0101,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_prep_branch_bo_0101 +{ + static const uint8 op_prep_branch_bo_0101_code[] = { + 0x8b, 0x85, 0xa8, 0x03, 0x00, 0x00, 0x85, 0xf6, 0x0f, 0x95, 0xc1, 0x31, + 0xd2, 0x48, 0x85, 0xc0, 0x89, 0x85, 0xa8, 0x03, 0x00, 0x00, 0x89, 0xc7, + 0x75, 0x16, 0x84, 0xc9, 0x74, 0x12, 0xba, 0x01, 0x00, 0x00, 0x00, 0x8d, + 0xb6, 0x00, 0x00, 0x00, 0x00, 0x8d, 0xbc, 0x27, 0x00, 0x00, 0x00, 0x00, + 0x89, 0xd6 + }; + copy_block(op_prep_branch_bo_0101_code, 50); + inc_code_ptr(50); +} +#endif + +DEFINE_GEN(gen_op_prep_branch_bo_011x,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_prep_branch_bo_011x +{ + static const uint8 op_prep_branch_bo_011x_code[] = { + 0x31, 0xc0, 0x85, 0xf6, 0x0f, 0x95, 0xc0, 0x89, 0xc6 + }; + copy_block(op_prep_branch_bo_011x_code, 9); + inc_code_ptr(9); +} +#endif + +DEFINE_GEN(gen_op_prep_branch_bo_1x00,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_prep_branch_bo_1x00 +{ + static const uint8 op_prep_branch_bo_1x00_code[] = { + 0x8b, 0x85, 0xa8, 0x03, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x89, 0x85, 0xa8, + 0x03, 0x00, 0x00, 0x89, 0xc7, 0x0f, 0x95, 0xc0, 0x0f, 0xb6, 0xc0, 0x89, + 0xc6 + }; + copy_block(op_prep_branch_bo_1x00_code, 25); + inc_code_ptr(25); +} +#endif + +DEFINE_GEN(gen_op_prep_branch_bo_1x01,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_prep_branch_bo_1x01 +{ + static const uint8 op_prep_branch_bo_1x01_code[] = { + 0x8b, 0x85, 0xa8, 0x03, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x89, 0x85, 0xa8, + 0x03, 0x00, 0x00, 0x89, 0xc7, 0x0f, 0x94, 0xc0, 0x0f, 0xb6, 0xc0, 0x89, + 0xc6 + }; + copy_block(op_prep_branch_bo_1x01_code, 25); + inc_code_ptr(25); +} +#endif + +DEFINE_GEN(gen_op_prep_branch_bo_1x1x,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_prep_branch_bo_1x1x +{ + static const uint8 op_prep_branch_bo_1x1x_code[] = { + 0xbe, 0x01, 0x00, 0x00, 0x00 + }; + copy_block(op_prep_branch_bo_1x1x_code, 5); + inc_code_ptr(5); +} +#endif + +DEFINE_GEN(gen_op_branch_chain_1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_branch_chain_1 +{ + static const uint8 op_branch_chain_1_code[] = { + 0xe9, 0x00, 0x00, 0x00, 0x00 + }; + copy_block(op_branch_chain_1_code, 5); + jmp_addr[0] = code_ptr() + 1; + inc_code_ptr(5); +} +#endif + +DEFINE_GEN(gen_op_branch_chain_2,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_branch_chain_2 +{ + static const uint8 op_branch_chain_2_code[] = { + 0x85, 0xf6, 0x74, 0x0c, 0xe9, 0x00, 0x00, 0x00, 0x00, 0xeb, 0x0a, 0x90, + 0x8d, 0x74, 0x26, 0x00, 0xe9, 0x00, 0x00, 0x00, 0x00 + }; + copy_block(op_branch_chain_2_code, 21); + jmp_addr[0] = code_ptr() + 5; + jmp_addr[1] = code_ptr() + 17; + inc_code_ptr(21); +} +#endif + +DEFINE_GEN(gen_op_branch_1_T0,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_branch_1_T0 +{ + static const uint8 op_branch_1_T0_code[] = { + 0x89, 0x9d, 0xac, 0x03, 0x00, 0x00 + }; + copy_block(op_branch_1_T0_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_branch_1_im,void,(long param1)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_branch_1_im +{ + static const uint8 op_branch_1_im_code[] = { + 0xb8, 0x00, 0x00, 0x00, 0x00, 0x89, 0x85, 0xac, 0x03, 0x00, 0x00 + }; + copy_block(op_branch_1_im_code, 11); + *(uint32_t *)(code_ptr() + 1) = param1 + 0; + inc_code_ptr(11); +} +#endif + +DEFINE_GEN(gen_op_branch_2_T0_im,void,(long param1)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_branch_2_T0_im +{ + static const uint8 op_branch_2_T0_im_code[] = { + 0x85, 0xf6, 0x89, 0xd8, 0x75, 0x05, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x89, + 0x85, 0xac, 0x03, 0x00, 0x00 + }; + copy_block(op_branch_2_T0_im_code, 17); + *(uint32_t *)(code_ptr() + 7) = param1 + 0; + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_branch_2_im_im,void,(long param1, long param2)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_branch_2_im_im +{ + static const uint8 op_branch_2_im_im_code[] = { + 0x85, 0xf6, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x75, 0x05, 0xb8, 0x00, 0x00, + 0x00, 0x00, 0x89, 0x85, 0xac, 0x03, 0x00, 0x00 + }; + copy_block(op_branch_2_im_im_code, 20); + *(uint32_t *)(code_ptr() + 3) = param1 + 0; + *(uint32_t *)(code_ptr() + 10) = param2 + 0; + inc_code_ptr(20); +} +#endif + +DEFINE_GEN(gen_op_record_cr0_T0,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_record_cr0_T0 +{ + static const uint8 op_record_cr0_T0_code[] = { + 0x0f, 0xb6, 0x85, 0x94, 0x03, 0x00, 0x00, 0x8b, 0x95, 0x90, 0x03, 0x00, + 0x00, 0xc1, 0xe0, 0x1c, 0x81, 0xe2, 0xff, 0xff, 0xff, 0x0f, 0x09, 0xc2, + 0x85, 0xdb, 0x7d, 0x08, 0x81, 0xca, 0x00, 0x00, 0x00, 0x80, 0xeb, 0x1c, + 0x7e, 0x0a, 0x81, 0xca, 0x00, 0x00, 0x00, 0x40, 0xeb, 0x12, 0x66, 0x90, + 0x81, 0xca, 0x00, 0x00, 0x00, 0x20, 0x8d, 0x76, 0x00, 0x8d, 0xbc, 0x27, + 0x00, 0x00, 0x00, 0x00, 0x89, 0x95, 0x90, 0x03, 0x00, 0x00 + }; + copy_block(op_record_cr0_T0_code, 70); + inc_code_ptr(70); +} +#endif + +DEFINE_GEN(gen_op_record_cr1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_record_cr1 +{ + static const uint8 op_record_cr1_code[] = { + 0x8b, 0x85, 0xa0, 0x03, 0x00, 0x00, 0x8b, 0x95, 0x90, 0x03, 0x00, 0x00, + 0xc1, 0xe8, 0x04, 0x81, 0xe2, 0xff, 0xff, 0xff, 0xf0, 0x25, 0x00, 0x00, + 0x00, 0x0f, 0x09, 0xc2, 0x89, 0x95, 0x90, 0x03, 0x00, 0x00 + }; + copy_block(op_record_cr1_code, 34); + inc_code_ptr(34); +} +#endif + +DEFINE_GEN(gen_op_compare_T0_T1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_compare_T0_T1 +{ + static const uint8 op_compare_T0_T1_code[] = { + 0x0f, 0xb6, 0x85, 0x94, 0x03, 0x00, 0x00, 0x39, 0xf3, 0x7d, 0x07, 0x89, + 0xc3, 0x83, 0xcb, 0x08, 0xeb, 0x1e, 0x7e, 0x0c, 0x89, 0xc3, 0x83, 0xcb, + 0x04, 0xeb, 0x15, 0x90, 0x8d, 0x74, 0x26, 0x00, 0x89, 0xc3, 0x83, 0xcb, + 0x02, 0x8d, 0x74, 0x26, 0x00, 0x8d, 0xbc, 0x27, 0x00, 0x00, 0x00, 0x00 + }; + copy_block(op_compare_T0_T1_code, 48); + inc_code_ptr(48); +} +#endif + +DEFINE_GEN(gen_op_compare_T0_im,void,(long param1)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_compare_T0_im +{ + static const uint8 op_compare_T0_im_code[] = { + 0x0f, 0xb6, 0x85, 0x94, 0x03, 0x00, 0x00, 0x81, 0xfb, 0x00, 0x00, 0x00, + 0x00, 0x7d, 0x07, 0x89, 0xc3, 0x83, 0xcb, 0x08, 0xeb, 0x1a, 0x7e, 0x08, + 0x89, 0xc3, 0x83, 0xcb, 0x04, 0xeb, 0x11, 0x90, 0x89, 0xc3, 0x83, 0xcb, + 0x02, 0x8d, 0x74, 0x26, 0x00, 0x8d, 0xbc, 0x27, 0x00, 0x00, 0x00, 0x00 + }; + copy_block(op_compare_T0_im_code, 48); + *(uint32_t *)(code_ptr() + 9) = param1 + 0; + inc_code_ptr(48); +} +#endif + +DEFINE_GEN(gen_op_compare_T0_0,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_compare_T0_0 +{ + static const uint8 op_compare_T0_0_code[] = { + 0x0f, 0xb6, 0x85, 0x94, 0x03, 0x00, 0x00, 0x85, 0xdb, 0x7d, 0x07, 0x89, + 0xc3, 0x83, 0xcb, 0x08, 0xeb, 0x1e, 0x7e, 0x0c, 0x89, 0xc3, 0x83, 0xcb, + 0x04, 0xeb, 0x15, 0x90, 0x8d, 0x74, 0x26, 0x00, 0x89, 0xc3, 0x83, 0xcb, + 0x02, 0x8d, 0x74, 0x26, 0x00, 0x8d, 0xbc, 0x27, 0x00, 0x00, 0x00, 0x00 + }; + copy_block(op_compare_T0_0_code, 48); + inc_code_ptr(48); +} +#endif + +DEFINE_GEN(gen_op_compare_logical_T0_T1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_compare_logical_T0_T1 +{ + static const uint8 op_compare_logical_T0_T1_code[] = { + 0x0f, 0xb6, 0x85, 0x94, 0x03, 0x00, 0x00, 0x39, 0xf3, 0x73, 0x07, 0x89, + 0xc3, 0x83, 0xcb, 0x08, 0xeb, 0x1e, 0x76, 0x0c, 0x89, 0xc3, 0x83, 0xcb, + 0x04, 0xeb, 0x15, 0x90, 0x8d, 0x74, 0x26, 0x00, 0x89, 0xc3, 0x83, 0xcb, + 0x02, 0x8d, 0x74, 0x26, 0x00, 0x8d, 0xbc, 0x27, 0x00, 0x00, 0x00, 0x00 + }; + copy_block(op_compare_logical_T0_T1_code, 48); + inc_code_ptr(48); +} +#endif + +DEFINE_GEN(gen_op_compare_logical_T0_im,void,(long param1)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_compare_logical_T0_im +{ + static const uint8 op_compare_logical_T0_im_code[] = { + 0x0f, 0xb6, 0x85, 0x94, 0x03, 0x00, 0x00, 0x81, 0xfb, 0x00, 0x00, 0x00, + 0x00, 0x73, 0x07, 0x89, 0xc3, 0x83, 0xcb, 0x08, 0xeb, 0x1a, 0x76, 0x08, + 0x89, 0xc3, 0x83, 0xcb, 0x04, 0xeb, 0x11, 0x90, 0x89, 0xc3, 0x83, 0xcb, + 0x02, 0x8d, 0x74, 0x26, 0x00, 0x8d, 0xbc, 0x27, 0x00, 0x00, 0x00, 0x00 + }; + copy_block(op_compare_logical_T0_im_code, 48); + *(uint32_t *)(code_ptr() + 9) = param1 + 0; + inc_code_ptr(48); +} +#endif + +DEFINE_GEN(gen_op_compare_logical_T0_0,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_compare_logical_T0_0 +{ + static const uint8 op_compare_logical_T0_0_code[] = { + 0x0f, 0xb6, 0x85, 0x94, 0x03, 0x00, 0x00, 0x85, 0xdb, 0x74, 0x07, 0x89, + 0xc3, 0x83, 0xcb, 0x04, 0xeb, 0x05, 0x89, 0xc3, 0x83, 0xcb, 0x02 + }; + copy_block(op_compare_logical_T0_0_code, 23); + inc_code_ptr(23); +} +#endif + +DEFINE_GEN(gen_op_divw_T0_T1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_divw_T0_T1 +{ + static const uint8 op_divw_T0_T1_code[] = { + 0x83, 0xec, 0x04, 0x85, 0xf6, 0x89, 0x1c, 0x24, 0x74, 0x13, 0x81, 0xfb, + 0x00, 0x00, 0x00, 0x80, 0x0f, 0x94, 0xc2, 0x83, 0xfe, 0xff, 0x0f, 0x94, + 0xc0, 0x84, 0xc2, 0x74, 0x08, 0x8b, 0x0c, 0x24, 0xc1, 0xf9, 0x1f, 0xeb, + 0x0b, 0x8b, 0x04, 0x24, 0x99, 0xf7, 0xfe, 0x89, 0xc1, 0x8d, 0x76, 0x00, + 0x5a, 0x89, 0xcb + }; + copy_block(op_divw_T0_T1_code, 51); + inc_code_ptr(51); +} +#endif + +DEFINE_GEN(gen_op_divwo_T0_T1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_divwo_T0_T1 +{ + static const uint8 op_divwo_T0_T1_code[] = { + 0x83, 0xec, 0x04, 0x85, 0xf6, 0x89, 0x1c, 0x24, 0x74, 0x13, 0x81, 0xfb, + 0x00, 0x00, 0x00, 0x80, 0x0f, 0x94, 0xc2, 0x83, 0xfe, 0xff, 0x0f, 0x94, + 0xc0, 0x84, 0xc2, 0x74, 0x16, 0x80, 0x8d, 0x94, 0x03, 0x00, 0x00, 0x01, + 0x8b, 0x0c, 0x24, 0xc6, 0x85, 0x95, 0x03, 0x00, 0x00, 0x01, 0xc1, 0xf9, + 0x1f, 0xeb, 0x1d, 0xc6, 0x85, 0x95, 0x03, 0x00, 0x00, 0x00, 0x8b, 0x04, + 0x24, 0x99, 0xf7, 0xfe, 0x89, 0xc1, 0x8d, 0xb4, 0x26, 0x00, 0x00, 0x00, + 0x00, 0x8d, 0xbc, 0x27, 0x00, 0x00, 0x00, 0x00, 0x89, 0xcb, 0x59 + }; + copy_block(op_divwo_T0_T1_code, 83); + inc_code_ptr(83); +} +#endif + +DEFINE_GEN(gen_op_divwu_T0_T1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_divwu_T0_T1 +{ + static const uint8 op_divwu_T0_T1_code[] = { + 0x83, 0xec, 0x04, 0x31, 0xc9, 0x85, 0xf6, 0x89, 0x34, 0x24, 0x74, 0x08, + 0x89, 0xd8, 0x31, 0xd2, 0xf7, 0xf6, 0x89, 0xc1, 0x58, 0x89, 0xcb + }; + copy_block(op_divwu_T0_T1_code, 23); + inc_code_ptr(23); +} +#endif + +DEFINE_GEN(gen_op_divwuo_T0_T1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_divwuo_T0_T1 +{ + static const uint8 op_divwuo_T0_T1_code[] = { + 0x85, 0xf6, 0x89, 0xf1, 0x75, 0x10, 0x80, 0x8d, 0x94, 0x03, 0x00, 0x00, + 0x01, 0xc6, 0x85, 0x95, 0x03, 0x00, 0x00, 0x01, 0xeb, 0x0f, 0xc6, 0x85, + 0x95, 0x03, 0x00, 0x00, 0x00, 0x89, 0xd8, 0x31, 0xd2, 0xf7, 0xf6, 0x89, + 0xc1, 0x89, 0xcb + }; + copy_block(op_divwuo_T0_T1_code, 39); + inc_code_ptr(39); +} +#endif + +DEFINE_GEN(gen_op_mulhw_T0_T1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_mulhw_T0_T1 +{ + static const uint8 op_mulhw_T0_T1_code[] = { + 0x89, 0xda, 0x89, 0xf0, 0xf7, 0xea, 0x89, 0xd3 + }; + copy_block(op_mulhw_T0_T1_code, 8); + inc_code_ptr(8); +} +#endif + +DEFINE_GEN(gen_op_mulhwu_T0_T1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_mulhwu_T0_T1 +{ + static const uint8 op_mulhwu_T0_T1_code[] = { + 0x89, 0xda, 0x89, 0xf0, 0xf7, 0xe2, 0x89, 0xd3 + }; + copy_block(op_mulhwu_T0_T1_code, 8); + inc_code_ptr(8); +} +#endif + +DEFINE_GEN(gen_op_mulli_T0_im,void,(long param1)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_mulli_T0_im +{ + static const uint8 op_mulli_T0_im_code[] = { + 0x69, 0xdb, 0x00, 0x00, 0x00, 0x00 + }; + copy_block(op_mulli_T0_im_code, 6); + *(uint32_t *)(code_ptr() + 2) = param1 + 0; + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_mullwo_T0_T1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_mullwo_T0_T1 +{ + static const uint8 op_mullwo_T0_T1_code[] = { + 0x89, 0xd8, 0x83, 0xec, 0x08, 0xf7, 0xee, 0x89, 0x04, 0x24, 0x8b, 0x04, + 0x24, 0x89, 0x54, 0x24, 0x04, 0x8b, 0x1c, 0x24, 0x99, 0x33, 0x54, 0x24, + 0x04, 0x33, 0x04, 0x24, 0x09, 0xd0, 0x0f, 0x95, 0xc0, 0x0f, 0xb6, 0xc0, + 0x88, 0x85, 0x95, 0x03, 0x00, 0x00, 0x08, 0x85, 0x94, 0x03, 0x00, 0x00, + 0x83, 0xc4, 0x08 + }; + copy_block(op_mullwo_T0_T1_code, 51); + inc_code_ptr(51); +} +#endif + +DEFINE_GEN(gen_op_slw_T0_T1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_slw_T0_T1 +{ + static const uint8 op_slw_T0_T1_code[] = { + 0x89, 0xf0, 0x89, 0xf1, 0xd3, 0xe3, 0xa8, 0x20, 0x74, 0x02, 0x31, 0xdb + }; + copy_block(op_slw_T0_T1_code, 12); + inc_code_ptr(12); +} +#endif + +DEFINE_GEN(gen_op_srw_T0_T1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_srw_T0_T1 +{ + static const uint8 op_srw_T0_T1_code[] = { + 0x89, 0xf0, 0x89, 0xf1, 0xd3, 0xeb, 0xa8, 0x20, 0x74, 0x02, 0x31, 0xdb + }; + copy_block(op_srw_T0_T1_code, 12); + inc_code_ptr(12); +} +#endif + +DEFINE_GEN(gen_op_sraw_T0_T1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_sraw_T0_T1 +{ + static const uint8 op_sraw_T0_T1_code[] = { + 0x89, 0xf0, 0x83, 0xec, 0x04, 0x83, 0xe0, 0x3f, 0x89, 0xc6, 0xc1, 0xe8, + 0x05, 0x84, 0xc0, 0x74, 0x11, 0x89, 0xd8, 0xc1, 0xe8, 0x1f, 0x89, 0xc3, + 0x88, 0x85, 0x96, 0x03, 0x00, 0x00, 0xf7, 0xdb, 0xeb, 0x3b, 0xc6, 0x44, + 0x24, 0x03, 0x00, 0x89, 0xf1, 0x89, 0xda, 0xd3, 0xfa, 0x85, 0xdb, 0x79, + 0x1f, 0xb8, 0xff, 0xff, 0xff, 0xff, 0xd3, 0xe0, 0xf7, 0xd0, 0x85, 0xd8, + 0x74, 0x12, 0xc6, 0x44, 0x24, 0x03, 0x01, 0x8d, 0xb6, 0x00, 0x00, 0x00, + 0x00, 0x8d, 0xbc, 0x27, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xb6, 0x44, 0x24, + 0x03, 0x89, 0xd3, 0x88, 0x85, 0x96, 0x03, 0x00, 0x00, 0x58 + }; + copy_block(op_sraw_T0_T1_code, 94); + inc_code_ptr(94); +} +#endif + +DEFINE_GEN(gen_op_sraw_T0_im,void,(long param1)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_sraw_T0_im +{ + static const uint8 op_sraw_T0_im_code[] = { + 0xb8, 0x00, 0x00, 0x00, 0x00, 0x89, 0xda, 0x88, 0xc1, 0x83, 0xec, 0x04, + 0xd3, 0xfa, 0x85, 0xdb, 0xc6, 0x44, 0x24, 0x03, 0x00, 0x79, 0x19, 0xb8, + 0xff, 0xff, 0xff, 0xff, 0xd3, 0xe0, 0xf7, 0xd0, 0x85, 0xc3, 0x74, 0x0c, + 0xc6, 0x44, 0x24, 0x03, 0x01, 0x8d, 0xb4, 0x26, 0x00, 0x00, 0x00, 0x00, + 0x0f, 0xb6, 0x44, 0x24, 0x03, 0x89, 0xd3, 0x88, 0x85, 0x96, 0x03, 0x00, + 0x00, 0x5a + }; + copy_block(op_sraw_T0_im_code, 62); + *(uint32_t *)(code_ptr() + 1) = param1 + 0; + inc_code_ptr(62); +} +#endif + +DEFINE_GEN(gen_op_rlwimi_T0_T1,void,(long param1, long param2)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_rlwimi_T0_T1 +{ + static const uint8 op_rlwimi_T0_T1_code[] = { + 0xb9, 0x00, 0x00, 0x00, 0x00, 0x89, 0xf2, 0xb8, 0x00, 0x00, 0x00, 0x00, + 0xd3, 0xc2, 0x21, 0xc2, 0xf7, 0xd0, 0x21, 0xd8, 0x89, 0xd3, 0x09, 0xc3 + }; + copy_block(op_rlwimi_T0_T1_code, 24); + *(uint32_t *)(code_ptr() + 1) = param1 + 0; + *(uint32_t *)(code_ptr() + 8) = param2 + 0; + inc_code_ptr(24); +} +#endif + +DEFINE_GEN(gen_op_rlwinm_T0_T1,void,(long param1, long param2)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_rlwinm_T0_T1 +{ + static const uint8 op_rlwinm_T0_T1_code[] = { + 0x89, 0xd8, 0xb9, 0x00, 0x00, 0x00, 0x00, 0xd3, 0xc0, 0x89, 0xc3, 0x81, + 0xe3, 0x00, 0x00, 0x00, 0x00 + }; + copy_block(op_rlwinm_T0_T1_code, 17); + *(uint32_t *)(code_ptr() + 3) = param1 + 0; + *(uint32_t *)(code_ptr() + 13) = param2 + 0; + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_rlwnm_T0_T1,void,(long param1)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_rlwnm_T0_T1 +{ + static const uint8 op_rlwnm_T0_T1_code[] = { + 0x89, 0xd8, 0x89, 0xf1, 0xd3, 0xc0, 0x89, 0xc3, 0x81, 0xe3, 0x00, 0x00, + 0x00, 0x00 + }; + copy_block(op_rlwnm_T0_T1_code, 14); + *(uint32_t *)(code_ptr() + 10) = param1 + 0; + inc_code_ptr(14); +} +#endif + +DEFINE_GEN(gen_op_cntlzw_32_T0,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_cntlzw_32_T0 +{ + static const uint8 op_cntlzw_32_T0_code[] = { + 0xb8, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xbd, 0xc3, 0xba, 0x1f, 0x00, 0x00, + 0x00, 0x89, 0xd3, 0x29, 0xc3 + }; + copy_block(op_cntlzw_32_T0_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_addo_T0_T1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_addo_T0_T1 +{ + static const uint8 op_addo_T0_T1_code[] = { + 0x01, 0xf3, 0x0f, 0x90, 0xc2, 0x08, 0x95, 0x94, 0x03, 0x00, 0x00, 0x88, + 0x95, 0x95, 0x03, 0x00, 0x00 + }; + copy_block(op_addo_T0_T1_code, 17); + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_addc_T0_im,void,(long param1)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_addc_T0_im +{ + static const uint8 op_addc_T0_im_code[] = { + 0x8d, 0x93, 0x00, 0x00, 0x00, 0x00, 0x39, 0xda, 0x0f, 0x92, 0x85, 0x96, + 0x03, 0x00, 0x00, 0x89, 0xd3 + }; + copy_block(op_addc_T0_im_code, 17); + *(uint32_t *)(code_ptr() + 2) = param1 + 0; + inc_code_ptr(17); +} +#endif + +DEFINE_GEN(gen_op_addc_T0_T1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_addc_T0_T1 +{ + static const uint8 op_addc_T0_T1_code[] = { + 0x01, 0xf3, 0x0f, 0x92, 0xc0, 0x88, 0x85, 0x96, 0x03, 0x00, 0x00 + }; + copy_block(op_addc_T0_T1_code, 11); + inc_code_ptr(11); +} +#endif + +DEFINE_GEN(gen_op_addco_T0_T1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_addco_T0_T1 +{ + static const uint8 op_addco_T0_T1_code[] = { + 0x01, 0xf3, 0x0f, 0x92, 0xc0, 0x0f, 0x90, 0xc2, 0x08, 0x95, 0x94, 0x03, + 0x00, 0x00, 0x88, 0x85, 0x96, 0x03, 0x00, 0x00, 0x88, 0x95, 0x95, 0x03, + 0x00, 0x00 + }; + copy_block(op_addco_T0_T1_code, 26); + inc_code_ptr(26); +} +#endif + +DEFINE_GEN(gen_op_adde_T0_T1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_adde_T0_T1 +{ + static const uint8 op_adde_T0_T1_code[] = { + 0x0f, 0xb6, 0x85, 0x96, 0x03, 0x00, 0x00, 0x0f, 0xba, 0xe0, 0x00, 0x11, + 0xf3, 0x0f, 0x92, 0xc0, 0x88, 0x85, 0x96, 0x03, 0x00, 0x00 + }; + copy_block(op_adde_T0_T1_code, 22); + inc_code_ptr(22); +} +#endif + +DEFINE_GEN(gen_op_addeo_T0_T1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_addeo_T0_T1 +{ + static const uint8 op_addeo_T0_T1_code[] = { + 0x0f, 0xb6, 0x85, 0x96, 0x03, 0x00, 0x00, 0x0f, 0xba, 0xe0, 0x00, 0x11, + 0xf3, 0x0f, 0x92, 0xc0, 0x0f, 0x90, 0xc2, 0x08, 0x95, 0x94, 0x03, 0x00, + 0x00, 0x88, 0x85, 0x96, 0x03, 0x00, 0x00, 0x88, 0x95, 0x95, 0x03, 0x00, + 0x00 + }; + copy_block(op_addeo_T0_T1_code, 37); + inc_code_ptr(37); +} +#endif + +DEFINE_GEN(gen_op_addme_T0,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_addme_T0 +{ + static const uint8 op_addme_T0_code[] = { + 0x0f, 0xb6, 0x85, 0x96, 0x03, 0x00, 0x00, 0x0f, 0xba, 0xe0, 0x00, 0x83, + 0xd3, 0xff, 0x0f, 0x92, 0xc0, 0x88, 0x85, 0x96, 0x03, 0x00, 0x00 + }; + copy_block(op_addme_T0_code, 23); + inc_code_ptr(23); +} +#endif + +DEFINE_GEN(gen_op_addmeo_T0,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_addmeo_T0 +{ + static const uint8 op_addmeo_T0_code[] = { + 0x0f, 0xb6, 0x85, 0x96, 0x03, 0x00, 0x00, 0x0f, 0xba, 0xe0, 0x00, 0x83, + 0xd3, 0xff, 0x0f, 0x92, 0xc0, 0x0f, 0x90, 0xc2, 0x08, 0x95, 0x94, 0x03, + 0x00, 0x00, 0x88, 0x85, 0x96, 0x03, 0x00, 0x00, 0x88, 0x95, 0x95, 0x03, + 0x00, 0x00 + }; + copy_block(op_addmeo_T0_code, 38); + inc_code_ptr(38); +} +#endif + +DEFINE_GEN(gen_op_addze_T0,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_addze_T0 +{ + static const uint8 op_addze_T0_code[] = { + 0x0f, 0xb6, 0x85, 0x96, 0x03, 0x00, 0x00, 0x0f, 0xba, 0xe0, 0x00, 0x83, + 0xd3, 0x00, 0x0f, 0x92, 0xc0, 0x88, 0x85, 0x96, 0x03, 0x00, 0x00 + }; + copy_block(op_addze_T0_code, 23); + inc_code_ptr(23); +} +#endif + +DEFINE_GEN(gen_op_addzeo_T0,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_addzeo_T0 +{ + static const uint8 op_addzeo_T0_code[] = { + 0x0f, 0xb6, 0x85, 0x96, 0x03, 0x00, 0x00, 0x0f, 0xba, 0xe0, 0x00, 0x83, + 0xd3, 0x00, 0x0f, 0x92, 0xc0, 0x0f, 0x90, 0xc2, 0x08, 0x95, 0x94, 0x03, + 0x00, 0x00, 0x88, 0x85, 0x96, 0x03, 0x00, 0x00, 0x88, 0x95, 0x95, 0x03, + 0x00, 0x00 + }; + copy_block(op_addzeo_T0_code, 38); + inc_code_ptr(38); +} +#endif + +DEFINE_GEN(gen_op_subf_T0_T1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_subf_T0_T1 +{ + static const uint8 op_subf_T0_T1_code[] = { + 0x89, 0xf0, 0x29, 0xd8, 0x89, 0xc3 + }; + copy_block(op_subf_T0_T1_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_subfo_T0_T1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_subfo_T0_T1 +{ + static const uint8 op_subfo_T0_T1_code[] = { + 0x89, 0xf0, 0x29, 0xd8, 0x0f, 0x90, 0xc2, 0x08, 0x95, 0x94, 0x03, 0x00, + 0x00, 0x89, 0xc3, 0x88, 0x95, 0x95, 0x03, 0x00, 0x00 + }; + copy_block(op_subfo_T0_T1_code, 21); + inc_code_ptr(21); +} +#endif + +DEFINE_GEN(gen_op_subfc_T0_im,void,(long param1)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_subfc_T0_im +{ + static const uint8 op_subfc_T0_im_code[] = { + 0xb8, 0x00, 0x00, 0x00, 0x00, 0x29, 0xd8, 0x3d, 0x00, 0x00, 0x00, 0x00, + 0x0f, 0x96, 0x85, 0x96, 0x03, 0x00, 0x00, 0x89, 0xc3 + }; + copy_block(op_subfc_T0_im_code, 21); + *(uint32_t *)(code_ptr() + 1) = param1 + 0; + *(uint32_t *)(code_ptr() + 8) = param1 + 0; + inc_code_ptr(21); +} +#endif + +DEFINE_GEN(gen_op_subfc_T0_T1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_subfc_T0_T1 +{ + static const uint8 op_subfc_T0_T1_code[] = { + 0x89, 0xf2, 0x29, 0xda, 0xf5, 0x0f, 0x92, 0xc0, 0x88, 0x85, 0x96, 0x03, + 0x00, 0x00, 0x89, 0xd3 + }; + copy_block(op_subfc_T0_T1_code, 16); + inc_code_ptr(16); +} +#endif + +DEFINE_GEN(gen_op_subfco_T0_T1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_subfco_T0_T1 +{ + static const uint8 op_subfco_T0_T1_code[] = { + 0x89, 0xf1, 0x29, 0xd9, 0xf5, 0x0f, 0x92, 0xc0, 0x0f, 0x90, 0xc2, 0x08, + 0x95, 0x94, 0x03, 0x00, 0x00, 0x89, 0xcb, 0x88, 0x85, 0x96, 0x03, 0x00, + 0x00, 0x88, 0x95, 0x95, 0x03, 0x00, 0x00 + }; + copy_block(op_subfco_T0_T1_code, 31); + inc_code_ptr(31); +} +#endif + +DEFINE_GEN(gen_op_subfe_T0_T1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_subfe_T0_T1 +{ + static const uint8 op_subfe_T0_T1_code[] = { + 0x0f, 0xb6, 0x85, 0x96, 0x03, 0x00, 0x00, 0x89, 0xf2, 0x0f, 0xba, 0xe0, + 0x00, 0xf5, 0x19, 0xda, 0xf5, 0x0f, 0x92, 0xc0, 0x88, 0x85, 0x96, 0x03, + 0x00, 0x00, 0x89, 0xd3 + }; + copy_block(op_subfe_T0_T1_code, 28); + inc_code_ptr(28); +} +#endif + +DEFINE_GEN(gen_op_subfeo_T0_T1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_subfeo_T0_T1 +{ + static const uint8 op_subfeo_T0_T1_code[] = { + 0x0f, 0xb6, 0x85, 0x96, 0x03, 0x00, 0x00, 0x89, 0xf1, 0x0f, 0xba, 0xe0, + 0x00, 0xf5, 0x19, 0xd9, 0xf5, 0x0f, 0x92, 0xc0, 0x0f, 0x90, 0xc2, 0x08, + 0x95, 0x94, 0x03, 0x00, 0x00, 0x89, 0xcb, 0x88, 0x85, 0x96, 0x03, 0x00, + 0x00, 0x88, 0x95, 0x95, 0x03, 0x00, 0x00 + }; + copy_block(op_subfeo_T0_T1_code, 43); + inc_code_ptr(43); +} +#endif + +DEFINE_GEN(gen_op_subfme_T0,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_subfme_T0 +{ + static const uint8 op_subfme_T0_code[] = { + 0x0f, 0xb6, 0x85, 0x96, 0x03, 0x00, 0x00, 0xba, 0xff, 0xff, 0xff, 0xff, + 0x0f, 0xba, 0xe0, 0x00, 0xf5, 0x19, 0xda, 0xf5, 0x0f, 0x92, 0xc0, 0x88, + 0x85, 0x96, 0x03, 0x00, 0x00, 0x89, 0xd3 + }; + copy_block(op_subfme_T0_code, 31); + inc_code_ptr(31); +} +#endif + +DEFINE_GEN(gen_op_subfmeo_T0,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_subfmeo_T0 +{ + static const uint8 op_subfmeo_T0_code[] = { + 0x83, 0xec, 0x04, 0xb9, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xb6, 0x95, 0x96, + 0x03, 0x00, 0x00, 0x89, 0xd0, 0x0f, 0xba, 0xe0, 0x00, 0xf5, 0x19, 0xd9, + 0xf5, 0x0f, 0x92, 0xc0, 0x0f, 0x90, 0xc2, 0x88, 0x85, 0x96, 0x03, 0x00, + 0x00, 0x89, 0xcb, 0x88, 0x95, 0x95, 0x03, 0x00, 0x00, 0x08, 0x95, 0x94, + 0x03, 0x00, 0x00, 0x59 + }; + copy_block(op_subfmeo_T0_code, 52); + inc_code_ptr(52); +} +#endif + +DEFINE_GEN(gen_op_subfze_T0,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_subfze_T0 +{ + static const uint8 op_subfze_T0_code[] = { + 0x0f, 0xb6, 0x85, 0x96, 0x03, 0x00, 0x00, 0x31, 0xd2, 0x0f, 0xba, 0xe0, + 0x00, 0xf5, 0x19, 0xda, 0xf5, 0x0f, 0x92, 0xc0, 0x88, 0x85, 0x96, 0x03, + 0x00, 0x00, 0x89, 0xd3 + }; + copy_block(op_subfze_T0_code, 28); + inc_code_ptr(28); +} +#endif + +DEFINE_GEN(gen_op_subfzeo_T0,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_subfzeo_T0 +{ + static const uint8 op_subfzeo_T0_code[] = { + 0x83, 0xec, 0x04, 0x31, 0xc9, 0x0f, 0xb6, 0x95, 0x96, 0x03, 0x00, 0x00, + 0x89, 0xd0, 0x0f, 0xba, 0xe0, 0x00, 0xf5, 0x19, 0xd9, 0xf5, 0x0f, 0x92, + 0xc0, 0x0f, 0x90, 0xc2, 0x88, 0x85, 0x96, 0x03, 0x00, 0x00, 0x89, 0xcb, + 0x88, 0x95, 0x95, 0x03, 0x00, 0x00, 0x08, 0x95, 0x94, 0x03, 0x00, 0x00, + 0x58 + }; + copy_block(op_subfzeo_T0_code, 49); + inc_code_ptr(49); +} +#endif + +DEFINE_GEN(gen_op_inc_32_mem,void,(long param1)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_inc_32_mem +{ + static const uint8 op_inc_32_mem_code[] = { + 0xff, 0x05, 0x00, 0x00, 0x00, 0x00 + }; + copy_block(op_inc_32_mem_code, 6); + *(uint32_t *)(code_ptr() + 2) = param1 + 0; + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_nego_T0,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_nego_T0 +{ + static const uint8 op_nego_T0_code[] = { + 0x31, 0xd2, 0x81, 0xfb, 0x00, 0x00, 0x00, 0x80, 0x0f, 0x94, 0xc2, 0x08, + 0x95, 0x94, 0x03, 0x00, 0x00, 0xf7, 0xdb, 0x88, 0x95, 0x95, 0x03, 0x00, + 0x00 + }; + copy_block(op_nego_T0_code, 25); + inc_code_ptr(25); +} +#endif + +DEFINE_GEN(gen_op_dcbz_T0,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_dcbz_T0 +{ + static const uint8 op_dcbz_T0_code[] = { + 0x83, 0xe3, 0xe0, 0x31, 0xc9, 0x8d, 0x83, 0x00, 0x00, 0x00, 0x11, 0x89, + 0x8b, 0x00, 0x00, 0x00, 0x11, 0x31, 0xc9, 0x89, 0x8b, 0x04, 0x00, 0x00, + 0x11, 0xc7, 0x40, 0x08, 0x00, 0x00, 0x00, 0x00, 0xc7, 0x40, 0x0c, 0x00, + 0x00, 0x00, 0x00, 0xc7, 0x40, 0x10, 0x00, 0x00, 0x00, 0x00, 0xc7, 0x40, + 0x14, 0x00, 0x00, 0x00, 0x00, 0xc7, 0x40, 0x18, 0x00, 0x00, 0x00, 0x00, + 0xc7, 0x40, 0x1c, 0x00, 0x00, 0x00, 0x00 + }; + copy_block(op_dcbz_T0_code, 67); + inc_code_ptr(67); +} +#endif + +DEFINE_GEN(gen_op_lmw_T0_im,void,(long param1)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_lmw_T0_im +{ + static const uint8 op_lmw_T0_im_code[] = { + 0x83, 0xec, 0x04, 0x89, 0xd9, 0xc7, 0x04, 0x24, 0x00, 0x00, 0x00, 0x00, + 0x83, 0x3c, 0x24, 0x1f, 0x77, 0x27, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x8d, + 0x54, 0x85, 0x10, 0x90, 0x8d, 0x74, 0x26, 0x00, 0x8b, 0x81, 0x00, 0x00, + 0x00, 0x11, 0x0f, 0xc8, 0xff, 0x04, 0x24, 0x83, 0xc1, 0x04, 0x89, 0x02, + 0x83, 0xc2, 0x04, 0x83, 0x3c, 0x24, 0x1f, 0x76, 0xe7, 0x58 + }; + copy_block(op_lmw_T0_im_code, 58); + *(uint32_t *)(code_ptr() + 8) = param1 + 0; + *(uint32_t *)(code_ptr() + 19) = param1 + 0; + inc_code_ptr(58); +} +#endif + +DEFINE_GEN(gen_op_stmw_T0_im,void,(long param1)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_stmw_T0_im +{ + static const uint8 op_stmw_T0_im_code[] = { + 0x83, 0xec, 0x04, 0x89, 0xd9, 0xc7, 0x04, 0x24, 0x00, 0x00, 0x00, 0x00, + 0x83, 0x3c, 0x24, 0x1f, 0x77, 0x27, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x8d, + 0x54, 0x85, 0x10, 0x90, 0x8d, 0x74, 0x26, 0x00, 0x8b, 0x02, 0x0f, 0xc8, + 0xff, 0x04, 0x24, 0x83, 0xc2, 0x04, 0x89, 0x81, 0x00, 0x00, 0x00, 0x11, + 0x83, 0xc1, 0x04, 0x83, 0x3c, 0x24, 0x1f, 0x76, 0xe7, 0x58 + }; + copy_block(op_stmw_T0_im_code, 58); + *(uint32_t *)(code_ptr() + 8) = param1 + 0; + *(uint32_t *)(code_ptr() + 19) = param1 + 0; + inc_code_ptr(58); +} +#endif + +DEFINE_GEN(gen_op_lmw_T0_29,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_lmw_T0_29 +{ + static const uint8 op_lmw_T0_29_code[] = { + 0x8b, 0x83, 0x00, 0x00, 0x00, 0x11, 0x0f, 0xc8, 0x89, 0x85, 0x84, 0x00, + 0x00, 0x00, 0x83, 0xc3, 0x04, 0x8b, 0x83, 0x00, 0x00, 0x00, 0x11, 0x0f, + 0xc8, 0x89, 0x85, 0x88, 0x00, 0x00, 0x00, 0x83, 0xc3, 0x04, 0x8b, 0x83, + 0x00, 0x00, 0x00, 0x11, 0x0f, 0xc8, 0x89, 0x85, 0x8c, 0x00, 0x00, 0x00 + }; + copy_block(op_lmw_T0_29_code, 48); + inc_code_ptr(48); +} +#endif + +DEFINE_GEN(gen_op_lmw_T0_28,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_lmw_T0_28 +{ + static const uint8 op_lmw_T0_28_code[] = { + 0x8b, 0x83, 0x00, 0x00, 0x00, 0x11, 0x0f, 0xc8, 0x89, 0x85, 0x80, 0x00, + 0x00, 0x00, 0x83, 0xc3, 0x04, 0x8b, 0x83, 0x00, 0x00, 0x00, 0x11, 0x0f, + 0xc8, 0x89, 0x85, 0x84, 0x00, 0x00, 0x00, 0x83, 0xc3, 0x04, 0x8b, 0x83, + 0x00, 0x00, 0x00, 0x11, 0x0f, 0xc8, 0x89, 0x85, 0x88, 0x00, 0x00, 0x00, + 0x83, 0xc3, 0x04, 0x8b, 0x83, 0x00, 0x00, 0x00, 0x11, 0x0f, 0xc8, 0x89, + 0x85, 0x8c, 0x00, 0x00, 0x00 + }; + copy_block(op_lmw_T0_28_code, 65); + inc_code_ptr(65); +} +#endif + +DEFINE_GEN(gen_op_lmw_T0_27,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_lmw_T0_27 +{ + static const uint8 op_lmw_T0_27_code[] = { + 0x8b, 0x83, 0x00, 0x00, 0x00, 0x11, 0x0f, 0xc8, 0x89, 0x45, 0x7c, 0x83, + 0xc3, 0x04, 0x8b, 0x83, 0x00, 0x00, 0x00, 0x11, 0x0f, 0xc8, 0x89, 0x85, + 0x80, 0x00, 0x00, 0x00, 0x83, 0xc3, 0x04, 0x8b, 0x83, 0x00, 0x00, 0x00, + 0x11, 0x0f, 0xc8, 0x89, 0x85, 0x84, 0x00, 0x00, 0x00, 0x83, 0xc3, 0x04, + 0x8b, 0x83, 0x00, 0x00, 0x00, 0x11, 0x0f, 0xc8, 0x89, 0x85, 0x88, 0x00, + 0x00, 0x00, 0x83, 0xc3, 0x04, 0x8b, 0x83, 0x00, 0x00, 0x00, 0x11, 0x0f, + 0xc8, 0x89, 0x85, 0x8c, 0x00, 0x00, 0x00 + }; + copy_block(op_lmw_T0_27_code, 79); + inc_code_ptr(79); +} +#endif + +DEFINE_GEN(gen_op_lmw_T0_26,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_lmw_T0_26 +{ + static const uint8 op_lmw_T0_26_code[] = { + 0x8b, 0x83, 0x00, 0x00, 0x00, 0x11, 0x0f, 0xc8, 0x89, 0x45, 0x78, 0x83, + 0xc3, 0x04, 0x8b, 0x83, 0x00, 0x00, 0x00, 0x11, 0x0f, 0xc8, 0x89, 0x45, + 0x7c, 0x83, 0xc3, 0x04, 0x8b, 0x83, 0x00, 0x00, 0x00, 0x11, 0x0f, 0xc8, + 0x89, 0x85, 0x80, 0x00, 0x00, 0x00, 0x83, 0xc3, 0x04, 0x8b, 0x83, 0x00, + 0x00, 0x00, 0x11, 0x0f, 0xc8, 0x89, 0x85, 0x84, 0x00, 0x00, 0x00, 0x83, + 0xc3, 0x04, 0x8b, 0x83, 0x00, 0x00, 0x00, 0x11, 0x0f, 0xc8, 0x89, 0x85, + 0x88, 0x00, 0x00, 0x00, 0x83, 0xc3, 0x04, 0x8b, 0x83, 0x00, 0x00, 0x00, + 0x11, 0x0f, 0xc8, 0x89, 0x85, 0x8c, 0x00, 0x00, 0x00 + }; + copy_block(op_lmw_T0_26_code, 93); + inc_code_ptr(93); +} +#endif + +DEFINE_GEN(gen_op_lmw_T0_30,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_lmw_T0_30 +{ + static const uint8 op_lmw_T0_30_code[] = { + 0x8b, 0x83, 0x00, 0x00, 0x00, 0x11, 0x0f, 0xc8, 0x89, 0x85, 0x88, 0x00, + 0x00, 0x00, 0x83, 0xc3, 0x04, 0x8b, 0x83, 0x00, 0x00, 0x00, 0x11, 0x0f, + 0xc8, 0x89, 0x85, 0x8c, 0x00, 0x00, 0x00 + }; + copy_block(op_lmw_T0_30_code, 31); + inc_code_ptr(31); +} +#endif + +DEFINE_GEN(gen_op_stmw_T0_29,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_stmw_T0_29 +{ + static const uint8 op_stmw_T0_29_code[] = { + 0x8b, 0x85, 0x84, 0x00, 0x00, 0x00, 0x0f, 0xc8, 0x89, 0x83, 0x00, 0x00, + 0x00, 0x11, 0x8b, 0x85, 0x88, 0x00, 0x00, 0x00, 0x83, 0xc3, 0x04, 0x0f, + 0xc8, 0x89, 0x83, 0x00, 0x00, 0x00, 0x11, 0x8b, 0x85, 0x8c, 0x00, 0x00, + 0x00, 0x83, 0xc3, 0x04, 0x0f, 0xc8, 0x89, 0x83, 0x00, 0x00, 0x00, 0x11 + }; + copy_block(op_stmw_T0_29_code, 48); + inc_code_ptr(48); +} +#endif + +DEFINE_GEN(gen_op_stmw_T0_28,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_stmw_T0_28 +{ + static const uint8 op_stmw_T0_28_code[] = { + 0x8b, 0x85, 0x80, 0x00, 0x00, 0x00, 0x0f, 0xc8, 0x89, 0x83, 0x00, 0x00, + 0x00, 0x11, 0x8b, 0x85, 0x84, 0x00, 0x00, 0x00, 0x83, 0xc3, 0x04, 0x0f, + 0xc8, 0x89, 0x83, 0x00, 0x00, 0x00, 0x11, 0x8b, 0x85, 0x88, 0x00, 0x00, + 0x00, 0x83, 0xc3, 0x04, 0x0f, 0xc8, 0x89, 0x83, 0x00, 0x00, 0x00, 0x11, + 0x8b, 0x85, 0x8c, 0x00, 0x00, 0x00, 0x83, 0xc3, 0x04, 0x0f, 0xc8, 0x89, + 0x83, 0x00, 0x00, 0x00, 0x11 + }; + copy_block(op_stmw_T0_28_code, 65); + inc_code_ptr(65); +} +#endif + +DEFINE_GEN(gen_op_stmw_T0_27,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_stmw_T0_27 +{ + static const uint8 op_stmw_T0_27_code[] = { + 0x8b, 0x45, 0x7c, 0x0f, 0xc8, 0x89, 0x83, 0x00, 0x00, 0x00, 0x11, 0x8b, + 0x85, 0x80, 0x00, 0x00, 0x00, 0x83, 0xc3, 0x04, 0x0f, 0xc8, 0x89, 0x83, + 0x00, 0x00, 0x00, 0x11, 0x8b, 0x85, 0x84, 0x00, 0x00, 0x00, 0x83, 0xc3, + 0x04, 0x0f, 0xc8, 0x89, 0x83, 0x00, 0x00, 0x00, 0x11, 0x8b, 0x85, 0x88, + 0x00, 0x00, 0x00, 0x83, 0xc3, 0x04, 0x0f, 0xc8, 0x89, 0x83, 0x00, 0x00, + 0x00, 0x11, 0x8b, 0x85, 0x8c, 0x00, 0x00, 0x00, 0x83, 0xc3, 0x04, 0x0f, + 0xc8, 0x89, 0x83, 0x00, 0x00, 0x00, 0x11 + }; + copy_block(op_stmw_T0_27_code, 79); + inc_code_ptr(79); +} +#endif + +DEFINE_GEN(gen_op_stmw_T0_26,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_stmw_T0_26 +{ + static const uint8 op_stmw_T0_26_code[] = { + 0x8b, 0x45, 0x78, 0x0f, 0xc8, 0x89, 0x83, 0x00, 0x00, 0x00, 0x11, 0x8b, + 0x45, 0x7c, 0x83, 0xc3, 0x04, 0x0f, 0xc8, 0x89, 0x83, 0x00, 0x00, 0x00, + 0x11, 0x8b, 0x85, 0x80, 0x00, 0x00, 0x00, 0x83, 0xc3, 0x04, 0x0f, 0xc8, + 0x89, 0x83, 0x00, 0x00, 0x00, 0x11, 0x8b, 0x85, 0x84, 0x00, 0x00, 0x00, + 0x83, 0xc3, 0x04, 0x0f, 0xc8, 0x89, 0x83, 0x00, 0x00, 0x00, 0x11, 0x8b, + 0x85, 0x88, 0x00, 0x00, 0x00, 0x83, 0xc3, 0x04, 0x0f, 0xc8, 0x89, 0x83, + 0x00, 0x00, 0x00, 0x11, 0x8b, 0x85, 0x8c, 0x00, 0x00, 0x00, 0x83, 0xc3, + 0x04, 0x0f, 0xc8, 0x89, 0x83, 0x00, 0x00, 0x00, 0x11 + }; + copy_block(op_stmw_T0_26_code, 93); + inc_code_ptr(93); +} +#endif + +DEFINE_GEN(gen_op_stmw_T0_30,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_stmw_T0_30 +{ + static const uint8 op_stmw_T0_30_code[] = { + 0x8b, 0x85, 0x88, 0x00, 0x00, 0x00, 0x0f, 0xc8, 0x89, 0x83, 0x00, 0x00, + 0x00, 0x11, 0x8b, 0x85, 0x8c, 0x00, 0x00, 0x00, 0x83, 0xc3, 0x04, 0x0f, + 0xc8, 0x89, 0x83, 0x00, 0x00, 0x00, 0x11 + }; + copy_block(op_stmw_T0_30_code, 31); + inc_code_ptr(31); +} +#endif + +DEFINE_GEN(gen_op_lmw_T0_31,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_lmw_T0_31 +{ + static const uint8 op_lmw_T0_31_code[] = { + 0x8b, 0x83, 0x00, 0x00, 0x00, 0x11, 0x0f, 0xc8, 0x89, 0x85, 0x8c, 0x00, + 0x00, 0x00 + }; + copy_block(op_lmw_T0_31_code, 14); + inc_code_ptr(14); +} +#endif + +DEFINE_GEN(gen_op_stmw_T0_31,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_stmw_T0_31 +{ + static const uint8 op_stmw_T0_31_code[] = { + 0x8b, 0x85, 0x8c, 0x00, 0x00, 0x00, 0x0f, 0xc8, 0x89, 0x83, 0x00, 0x00, + 0x00, 0x11 + }; + copy_block(op_stmw_T0_31_code, 14); + inc_code_ptr(14); +} +#endif + +DEFINE_GEN(gen_op_load_ad_VD_VR0,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_VD_VR0 +{ + static const uint8 op_load_ad_VD_VR0_code[] = { + 0x8d, 0x85, 0x90, 0x01, 0x00, 0x00, 0x89, 0x85, 0x3c, 0x08, 0x0e, 0x00 + }; + copy_block(op_load_ad_VD_VR0_code, 12); + inc_code_ptr(12); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V0_VR0,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V0_VR0 +{ + static const uint8 op_load_ad_V0_VR0_code[] = { + 0x8d, 0x9d, 0x90, 0x01, 0x00, 0x00 + }; + copy_block(op_load_ad_V0_VR0_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V1_VR0,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V1_VR0 +{ + static const uint8 op_load_ad_V1_VR0_code[] = { + 0x8d, 0xb5, 0x90, 0x01, 0x00, 0x00 + }; + copy_block(op_load_ad_V1_VR0_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V2_VR0,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V2_VR0 +{ + static const uint8 op_load_ad_V2_VR0_code[] = { + 0x8d, 0xbd, 0x90, 0x01, 0x00, 0x00 + }; + copy_block(op_load_ad_V2_VR0_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_VD_VR1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_VD_VR1 +{ + static const uint8 op_load_ad_VD_VR1_code[] = { + 0x8d, 0x85, 0xa0, 0x01, 0x00, 0x00, 0x89, 0x85, 0x3c, 0x08, 0x0e, 0x00 + }; + copy_block(op_load_ad_VD_VR1_code, 12); + inc_code_ptr(12); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V0_VR1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V0_VR1 +{ + static const uint8 op_load_ad_V0_VR1_code[] = { + 0x8d, 0x9d, 0xa0, 0x01, 0x00, 0x00 + }; + copy_block(op_load_ad_V0_VR1_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V1_VR1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V1_VR1 +{ + static const uint8 op_load_ad_V1_VR1_code[] = { + 0x8d, 0xb5, 0xa0, 0x01, 0x00, 0x00 + }; + copy_block(op_load_ad_V1_VR1_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V2_VR1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V2_VR1 +{ + static const uint8 op_load_ad_V2_VR1_code[] = { + 0x8d, 0xbd, 0xa0, 0x01, 0x00, 0x00 + }; + copy_block(op_load_ad_V2_VR1_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_VD_VR2,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_VD_VR2 +{ + static const uint8 op_load_ad_VD_VR2_code[] = { + 0x8d, 0x85, 0xb0, 0x01, 0x00, 0x00, 0x89, 0x85, 0x3c, 0x08, 0x0e, 0x00 + }; + copy_block(op_load_ad_VD_VR2_code, 12); + inc_code_ptr(12); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V0_VR2,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V0_VR2 +{ + static const uint8 op_load_ad_V0_VR2_code[] = { + 0x8d, 0x9d, 0xb0, 0x01, 0x00, 0x00 + }; + copy_block(op_load_ad_V0_VR2_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V1_VR2,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V1_VR2 +{ + static const uint8 op_load_ad_V1_VR2_code[] = { + 0x8d, 0xb5, 0xb0, 0x01, 0x00, 0x00 + }; + copy_block(op_load_ad_V1_VR2_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V2_VR2,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V2_VR2 +{ + static const uint8 op_load_ad_V2_VR2_code[] = { + 0x8d, 0xbd, 0xb0, 0x01, 0x00, 0x00 + }; + copy_block(op_load_ad_V2_VR2_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_VD_VR3,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_VD_VR3 +{ + static const uint8 op_load_ad_VD_VR3_code[] = { + 0x8d, 0x85, 0xc0, 0x01, 0x00, 0x00, 0x89, 0x85, 0x3c, 0x08, 0x0e, 0x00 + }; + copy_block(op_load_ad_VD_VR3_code, 12); + inc_code_ptr(12); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V0_VR3,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V0_VR3 +{ + static const uint8 op_load_ad_V0_VR3_code[] = { + 0x8d, 0x9d, 0xc0, 0x01, 0x00, 0x00 + }; + copy_block(op_load_ad_V0_VR3_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V1_VR3,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V1_VR3 +{ + static const uint8 op_load_ad_V1_VR3_code[] = { + 0x8d, 0xb5, 0xc0, 0x01, 0x00, 0x00 + }; + copy_block(op_load_ad_V1_VR3_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V2_VR3,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V2_VR3 +{ + static const uint8 op_load_ad_V2_VR3_code[] = { + 0x8d, 0xbd, 0xc0, 0x01, 0x00, 0x00 + }; + copy_block(op_load_ad_V2_VR3_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_VD_VR4,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_VD_VR4 +{ + static const uint8 op_load_ad_VD_VR4_code[] = { + 0x8d, 0x85, 0xd0, 0x01, 0x00, 0x00, 0x89, 0x85, 0x3c, 0x08, 0x0e, 0x00 + }; + copy_block(op_load_ad_VD_VR4_code, 12); + inc_code_ptr(12); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V0_VR4,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V0_VR4 +{ + static const uint8 op_load_ad_V0_VR4_code[] = { + 0x8d, 0x9d, 0xd0, 0x01, 0x00, 0x00 + }; + copy_block(op_load_ad_V0_VR4_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V1_VR4,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V1_VR4 +{ + static const uint8 op_load_ad_V1_VR4_code[] = { + 0x8d, 0xb5, 0xd0, 0x01, 0x00, 0x00 + }; + copy_block(op_load_ad_V1_VR4_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V2_VR4,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V2_VR4 +{ + static const uint8 op_load_ad_V2_VR4_code[] = { + 0x8d, 0xbd, 0xd0, 0x01, 0x00, 0x00 + }; + copy_block(op_load_ad_V2_VR4_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_VD_VR5,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_VD_VR5 +{ + static const uint8 op_load_ad_VD_VR5_code[] = { + 0x8d, 0x85, 0xe0, 0x01, 0x00, 0x00, 0x89, 0x85, 0x3c, 0x08, 0x0e, 0x00 + }; + copy_block(op_load_ad_VD_VR5_code, 12); + inc_code_ptr(12); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V0_VR5,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V0_VR5 +{ + static const uint8 op_load_ad_V0_VR5_code[] = { + 0x8d, 0x9d, 0xe0, 0x01, 0x00, 0x00 + }; + copy_block(op_load_ad_V0_VR5_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V1_VR5,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V1_VR5 +{ + static const uint8 op_load_ad_V1_VR5_code[] = { + 0x8d, 0xb5, 0xe0, 0x01, 0x00, 0x00 + }; + copy_block(op_load_ad_V1_VR5_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V2_VR5,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V2_VR5 +{ + static const uint8 op_load_ad_V2_VR5_code[] = { + 0x8d, 0xbd, 0xe0, 0x01, 0x00, 0x00 + }; + copy_block(op_load_ad_V2_VR5_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_VD_VR6,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_VD_VR6 +{ + static const uint8 op_load_ad_VD_VR6_code[] = { + 0x8d, 0x85, 0xf0, 0x01, 0x00, 0x00, 0x89, 0x85, 0x3c, 0x08, 0x0e, 0x00 + }; + copy_block(op_load_ad_VD_VR6_code, 12); + inc_code_ptr(12); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V0_VR6,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V0_VR6 +{ + static const uint8 op_load_ad_V0_VR6_code[] = { + 0x8d, 0x9d, 0xf0, 0x01, 0x00, 0x00 + }; + copy_block(op_load_ad_V0_VR6_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V1_VR6,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V1_VR6 +{ + static const uint8 op_load_ad_V1_VR6_code[] = { + 0x8d, 0xb5, 0xf0, 0x01, 0x00, 0x00 + }; + copy_block(op_load_ad_V1_VR6_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V2_VR6,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V2_VR6 +{ + static const uint8 op_load_ad_V2_VR6_code[] = { + 0x8d, 0xbd, 0xf0, 0x01, 0x00, 0x00 + }; + copy_block(op_load_ad_V2_VR6_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_VD_VR7,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_VD_VR7 +{ + static const uint8 op_load_ad_VD_VR7_code[] = { + 0x8d, 0x85, 0x00, 0x02, 0x00, 0x00, 0x89, 0x85, 0x3c, 0x08, 0x0e, 0x00 + }; + copy_block(op_load_ad_VD_VR7_code, 12); + inc_code_ptr(12); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V0_VR7,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V0_VR7 +{ + static const uint8 op_load_ad_V0_VR7_code[] = { + 0x8d, 0x9d, 0x00, 0x02, 0x00, 0x00 + }; + copy_block(op_load_ad_V0_VR7_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V1_VR7,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V1_VR7 +{ + static const uint8 op_load_ad_V1_VR7_code[] = { + 0x8d, 0xb5, 0x00, 0x02, 0x00, 0x00 + }; + copy_block(op_load_ad_V1_VR7_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V2_VR7,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V2_VR7 +{ + static const uint8 op_load_ad_V2_VR7_code[] = { + 0x8d, 0xbd, 0x00, 0x02, 0x00, 0x00 + }; + copy_block(op_load_ad_V2_VR7_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_VD_VR8,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_VD_VR8 +{ + static const uint8 op_load_ad_VD_VR8_code[] = { + 0x8d, 0x85, 0x10, 0x02, 0x00, 0x00, 0x89, 0x85, 0x3c, 0x08, 0x0e, 0x00 + }; + copy_block(op_load_ad_VD_VR8_code, 12); + inc_code_ptr(12); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V0_VR8,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V0_VR8 +{ + static const uint8 op_load_ad_V0_VR8_code[] = { + 0x8d, 0x9d, 0x10, 0x02, 0x00, 0x00 + }; + copy_block(op_load_ad_V0_VR8_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V1_VR8,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V1_VR8 +{ + static const uint8 op_load_ad_V1_VR8_code[] = { + 0x8d, 0xb5, 0x10, 0x02, 0x00, 0x00 + }; + copy_block(op_load_ad_V1_VR8_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V2_VR8,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V2_VR8 +{ + static const uint8 op_load_ad_V2_VR8_code[] = { + 0x8d, 0xbd, 0x10, 0x02, 0x00, 0x00 + }; + copy_block(op_load_ad_V2_VR8_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_VD_VR9,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_VD_VR9 +{ + static const uint8 op_load_ad_VD_VR9_code[] = { + 0x8d, 0x85, 0x20, 0x02, 0x00, 0x00, 0x89, 0x85, 0x3c, 0x08, 0x0e, 0x00 + }; + copy_block(op_load_ad_VD_VR9_code, 12); + inc_code_ptr(12); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V0_VR9,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V0_VR9 +{ + static const uint8 op_load_ad_V0_VR9_code[] = { + 0x8d, 0x9d, 0x20, 0x02, 0x00, 0x00 + }; + copy_block(op_load_ad_V0_VR9_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V1_VR9,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V1_VR9 +{ + static const uint8 op_load_ad_V1_VR9_code[] = { + 0x8d, 0xb5, 0x20, 0x02, 0x00, 0x00 + }; + copy_block(op_load_ad_V1_VR9_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V2_VR9,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V2_VR9 +{ + static const uint8 op_load_ad_V2_VR9_code[] = { + 0x8d, 0xbd, 0x20, 0x02, 0x00, 0x00 + }; + copy_block(op_load_ad_V2_VR9_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_VD_VR10,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_VD_VR10 +{ + static const uint8 op_load_ad_VD_VR10_code[] = { + 0x8d, 0x85, 0x30, 0x02, 0x00, 0x00, 0x89, 0x85, 0x3c, 0x08, 0x0e, 0x00 + }; + copy_block(op_load_ad_VD_VR10_code, 12); + inc_code_ptr(12); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V0_VR10,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V0_VR10 +{ + static const uint8 op_load_ad_V0_VR10_code[] = { + 0x8d, 0x9d, 0x30, 0x02, 0x00, 0x00 + }; + copy_block(op_load_ad_V0_VR10_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V1_VR10,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V1_VR10 +{ + static const uint8 op_load_ad_V1_VR10_code[] = { + 0x8d, 0xb5, 0x30, 0x02, 0x00, 0x00 + }; + copy_block(op_load_ad_V1_VR10_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V2_VR10,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V2_VR10 +{ + static const uint8 op_load_ad_V2_VR10_code[] = { + 0x8d, 0xbd, 0x30, 0x02, 0x00, 0x00 + }; + copy_block(op_load_ad_V2_VR10_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_VD_VR11,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_VD_VR11 +{ + static const uint8 op_load_ad_VD_VR11_code[] = { + 0x8d, 0x85, 0x40, 0x02, 0x00, 0x00, 0x89, 0x85, 0x3c, 0x08, 0x0e, 0x00 + }; + copy_block(op_load_ad_VD_VR11_code, 12); + inc_code_ptr(12); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V0_VR11,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V0_VR11 +{ + static const uint8 op_load_ad_V0_VR11_code[] = { + 0x8d, 0x9d, 0x40, 0x02, 0x00, 0x00 + }; + copy_block(op_load_ad_V0_VR11_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V1_VR11,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V1_VR11 +{ + static const uint8 op_load_ad_V1_VR11_code[] = { + 0x8d, 0xb5, 0x40, 0x02, 0x00, 0x00 + }; + copy_block(op_load_ad_V1_VR11_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V2_VR11,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V2_VR11 +{ + static const uint8 op_load_ad_V2_VR11_code[] = { + 0x8d, 0xbd, 0x40, 0x02, 0x00, 0x00 + }; + copy_block(op_load_ad_V2_VR11_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_VD_VR12,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_VD_VR12 +{ + static const uint8 op_load_ad_VD_VR12_code[] = { + 0x8d, 0x85, 0x50, 0x02, 0x00, 0x00, 0x89, 0x85, 0x3c, 0x08, 0x0e, 0x00 + }; + copy_block(op_load_ad_VD_VR12_code, 12); + inc_code_ptr(12); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V0_VR12,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V0_VR12 +{ + static const uint8 op_load_ad_V0_VR12_code[] = { + 0x8d, 0x9d, 0x50, 0x02, 0x00, 0x00 + }; + copy_block(op_load_ad_V0_VR12_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V1_VR12,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V1_VR12 +{ + static const uint8 op_load_ad_V1_VR12_code[] = { + 0x8d, 0xb5, 0x50, 0x02, 0x00, 0x00 + }; + copy_block(op_load_ad_V1_VR12_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V2_VR12,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V2_VR12 +{ + static const uint8 op_load_ad_V2_VR12_code[] = { + 0x8d, 0xbd, 0x50, 0x02, 0x00, 0x00 + }; + copy_block(op_load_ad_V2_VR12_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_VD_VR13,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_VD_VR13 +{ + static const uint8 op_load_ad_VD_VR13_code[] = { + 0x8d, 0x85, 0x60, 0x02, 0x00, 0x00, 0x89, 0x85, 0x3c, 0x08, 0x0e, 0x00 + }; + copy_block(op_load_ad_VD_VR13_code, 12); + inc_code_ptr(12); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V0_VR13,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V0_VR13 +{ + static const uint8 op_load_ad_V0_VR13_code[] = { + 0x8d, 0x9d, 0x60, 0x02, 0x00, 0x00 + }; + copy_block(op_load_ad_V0_VR13_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V1_VR13,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V1_VR13 +{ + static const uint8 op_load_ad_V1_VR13_code[] = { + 0x8d, 0xb5, 0x60, 0x02, 0x00, 0x00 + }; + copy_block(op_load_ad_V1_VR13_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V2_VR13,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V2_VR13 +{ + static const uint8 op_load_ad_V2_VR13_code[] = { + 0x8d, 0xbd, 0x60, 0x02, 0x00, 0x00 + }; + copy_block(op_load_ad_V2_VR13_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_VD_VR14,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_VD_VR14 +{ + static const uint8 op_load_ad_VD_VR14_code[] = { + 0x8d, 0x85, 0x70, 0x02, 0x00, 0x00, 0x89, 0x85, 0x3c, 0x08, 0x0e, 0x00 + }; + copy_block(op_load_ad_VD_VR14_code, 12); + inc_code_ptr(12); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V0_VR14,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V0_VR14 +{ + static const uint8 op_load_ad_V0_VR14_code[] = { + 0x8d, 0x9d, 0x70, 0x02, 0x00, 0x00 + }; + copy_block(op_load_ad_V0_VR14_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V1_VR14,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V1_VR14 +{ + static const uint8 op_load_ad_V1_VR14_code[] = { + 0x8d, 0xb5, 0x70, 0x02, 0x00, 0x00 + }; + copy_block(op_load_ad_V1_VR14_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V2_VR14,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V2_VR14 +{ + static const uint8 op_load_ad_V2_VR14_code[] = { + 0x8d, 0xbd, 0x70, 0x02, 0x00, 0x00 + }; + copy_block(op_load_ad_V2_VR14_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_VD_VR15,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_VD_VR15 +{ + static const uint8 op_load_ad_VD_VR15_code[] = { + 0x8d, 0x85, 0x80, 0x02, 0x00, 0x00, 0x89, 0x85, 0x3c, 0x08, 0x0e, 0x00 + }; + copy_block(op_load_ad_VD_VR15_code, 12); + inc_code_ptr(12); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V0_VR15,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V0_VR15 +{ + static const uint8 op_load_ad_V0_VR15_code[] = { + 0x8d, 0x9d, 0x80, 0x02, 0x00, 0x00 + }; + copy_block(op_load_ad_V0_VR15_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V1_VR15,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V1_VR15 +{ + static const uint8 op_load_ad_V1_VR15_code[] = { + 0x8d, 0xb5, 0x80, 0x02, 0x00, 0x00 + }; + copy_block(op_load_ad_V1_VR15_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V2_VR15,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V2_VR15 +{ + static const uint8 op_load_ad_V2_VR15_code[] = { + 0x8d, 0xbd, 0x80, 0x02, 0x00, 0x00 + }; + copy_block(op_load_ad_V2_VR15_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_VD_VR16,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_VD_VR16 +{ + static const uint8 op_load_ad_VD_VR16_code[] = { + 0x8d, 0x85, 0x90, 0x02, 0x00, 0x00, 0x89, 0x85, 0x3c, 0x08, 0x0e, 0x00 + }; + copy_block(op_load_ad_VD_VR16_code, 12); + inc_code_ptr(12); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V0_VR16,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V0_VR16 +{ + static const uint8 op_load_ad_V0_VR16_code[] = { + 0x8d, 0x9d, 0x90, 0x02, 0x00, 0x00 + }; + copy_block(op_load_ad_V0_VR16_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V1_VR16,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V1_VR16 +{ + static const uint8 op_load_ad_V1_VR16_code[] = { + 0x8d, 0xb5, 0x90, 0x02, 0x00, 0x00 + }; + copy_block(op_load_ad_V1_VR16_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V2_VR16,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V2_VR16 +{ + static const uint8 op_load_ad_V2_VR16_code[] = { + 0x8d, 0xbd, 0x90, 0x02, 0x00, 0x00 + }; + copy_block(op_load_ad_V2_VR16_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_VD_VR17,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_VD_VR17 +{ + static const uint8 op_load_ad_VD_VR17_code[] = { + 0x8d, 0x85, 0xa0, 0x02, 0x00, 0x00, 0x89, 0x85, 0x3c, 0x08, 0x0e, 0x00 + }; + copy_block(op_load_ad_VD_VR17_code, 12); + inc_code_ptr(12); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V0_VR17,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V0_VR17 +{ + static const uint8 op_load_ad_V0_VR17_code[] = { + 0x8d, 0x9d, 0xa0, 0x02, 0x00, 0x00 + }; + copy_block(op_load_ad_V0_VR17_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V1_VR17,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V1_VR17 +{ + static const uint8 op_load_ad_V1_VR17_code[] = { + 0x8d, 0xb5, 0xa0, 0x02, 0x00, 0x00 + }; + copy_block(op_load_ad_V1_VR17_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V2_VR17,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V2_VR17 +{ + static const uint8 op_load_ad_V2_VR17_code[] = { + 0x8d, 0xbd, 0xa0, 0x02, 0x00, 0x00 + }; + copy_block(op_load_ad_V2_VR17_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_VD_VR18,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_VD_VR18 +{ + static const uint8 op_load_ad_VD_VR18_code[] = { + 0x8d, 0x85, 0xb0, 0x02, 0x00, 0x00, 0x89, 0x85, 0x3c, 0x08, 0x0e, 0x00 + }; + copy_block(op_load_ad_VD_VR18_code, 12); + inc_code_ptr(12); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V0_VR18,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V0_VR18 +{ + static const uint8 op_load_ad_V0_VR18_code[] = { + 0x8d, 0x9d, 0xb0, 0x02, 0x00, 0x00 + }; + copy_block(op_load_ad_V0_VR18_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V1_VR18,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V1_VR18 +{ + static const uint8 op_load_ad_V1_VR18_code[] = { + 0x8d, 0xb5, 0xb0, 0x02, 0x00, 0x00 + }; + copy_block(op_load_ad_V1_VR18_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V2_VR18,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V2_VR18 +{ + static const uint8 op_load_ad_V2_VR18_code[] = { + 0x8d, 0xbd, 0xb0, 0x02, 0x00, 0x00 + }; + copy_block(op_load_ad_V2_VR18_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_VD_VR19,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_VD_VR19 +{ + static const uint8 op_load_ad_VD_VR19_code[] = { + 0x8d, 0x85, 0xc0, 0x02, 0x00, 0x00, 0x89, 0x85, 0x3c, 0x08, 0x0e, 0x00 + }; + copy_block(op_load_ad_VD_VR19_code, 12); + inc_code_ptr(12); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V0_VR19,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V0_VR19 +{ + static const uint8 op_load_ad_V0_VR19_code[] = { + 0x8d, 0x9d, 0xc0, 0x02, 0x00, 0x00 + }; + copy_block(op_load_ad_V0_VR19_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V1_VR19,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V1_VR19 +{ + static const uint8 op_load_ad_V1_VR19_code[] = { + 0x8d, 0xb5, 0xc0, 0x02, 0x00, 0x00 + }; + copy_block(op_load_ad_V1_VR19_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V2_VR19,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V2_VR19 +{ + static const uint8 op_load_ad_V2_VR19_code[] = { + 0x8d, 0xbd, 0xc0, 0x02, 0x00, 0x00 + }; + copy_block(op_load_ad_V2_VR19_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_VD_VR20,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_VD_VR20 +{ + static const uint8 op_load_ad_VD_VR20_code[] = { + 0x8d, 0x85, 0xd0, 0x02, 0x00, 0x00, 0x89, 0x85, 0x3c, 0x08, 0x0e, 0x00 + }; + copy_block(op_load_ad_VD_VR20_code, 12); + inc_code_ptr(12); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V0_VR20,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V0_VR20 +{ + static const uint8 op_load_ad_V0_VR20_code[] = { + 0x8d, 0x9d, 0xd0, 0x02, 0x00, 0x00 + }; + copy_block(op_load_ad_V0_VR20_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V1_VR20,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V1_VR20 +{ + static const uint8 op_load_ad_V1_VR20_code[] = { + 0x8d, 0xb5, 0xd0, 0x02, 0x00, 0x00 + }; + copy_block(op_load_ad_V1_VR20_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V2_VR20,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V2_VR20 +{ + static const uint8 op_load_ad_V2_VR20_code[] = { + 0x8d, 0xbd, 0xd0, 0x02, 0x00, 0x00 + }; + copy_block(op_load_ad_V2_VR20_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_VD_VR21,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_VD_VR21 +{ + static const uint8 op_load_ad_VD_VR21_code[] = { + 0x8d, 0x85, 0xe0, 0x02, 0x00, 0x00, 0x89, 0x85, 0x3c, 0x08, 0x0e, 0x00 + }; + copy_block(op_load_ad_VD_VR21_code, 12); + inc_code_ptr(12); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V0_VR21,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V0_VR21 +{ + static const uint8 op_load_ad_V0_VR21_code[] = { + 0x8d, 0x9d, 0xe0, 0x02, 0x00, 0x00 + }; + copy_block(op_load_ad_V0_VR21_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V1_VR21,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V1_VR21 +{ + static const uint8 op_load_ad_V1_VR21_code[] = { + 0x8d, 0xb5, 0xe0, 0x02, 0x00, 0x00 + }; + copy_block(op_load_ad_V1_VR21_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V2_VR21,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V2_VR21 +{ + static const uint8 op_load_ad_V2_VR21_code[] = { + 0x8d, 0xbd, 0xe0, 0x02, 0x00, 0x00 + }; + copy_block(op_load_ad_V2_VR21_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_VD_VR22,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_VD_VR22 +{ + static const uint8 op_load_ad_VD_VR22_code[] = { + 0x8d, 0x85, 0xf0, 0x02, 0x00, 0x00, 0x89, 0x85, 0x3c, 0x08, 0x0e, 0x00 + }; + copy_block(op_load_ad_VD_VR22_code, 12); + inc_code_ptr(12); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V0_VR22,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V0_VR22 +{ + static const uint8 op_load_ad_V0_VR22_code[] = { + 0x8d, 0x9d, 0xf0, 0x02, 0x00, 0x00 + }; + copy_block(op_load_ad_V0_VR22_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V1_VR22,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V1_VR22 +{ + static const uint8 op_load_ad_V1_VR22_code[] = { + 0x8d, 0xb5, 0xf0, 0x02, 0x00, 0x00 + }; + copy_block(op_load_ad_V1_VR22_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V2_VR22,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V2_VR22 +{ + static const uint8 op_load_ad_V2_VR22_code[] = { + 0x8d, 0xbd, 0xf0, 0x02, 0x00, 0x00 + }; + copy_block(op_load_ad_V2_VR22_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_VD_VR23,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_VD_VR23 +{ + static const uint8 op_load_ad_VD_VR23_code[] = { + 0x8d, 0x85, 0x00, 0x03, 0x00, 0x00, 0x89, 0x85, 0x3c, 0x08, 0x0e, 0x00 + }; + copy_block(op_load_ad_VD_VR23_code, 12); + inc_code_ptr(12); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V0_VR23,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V0_VR23 +{ + static const uint8 op_load_ad_V0_VR23_code[] = { + 0x8d, 0x9d, 0x00, 0x03, 0x00, 0x00 + }; + copy_block(op_load_ad_V0_VR23_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V1_VR23,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V1_VR23 +{ + static const uint8 op_load_ad_V1_VR23_code[] = { + 0x8d, 0xb5, 0x00, 0x03, 0x00, 0x00 + }; + copy_block(op_load_ad_V1_VR23_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V2_VR23,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V2_VR23 +{ + static const uint8 op_load_ad_V2_VR23_code[] = { + 0x8d, 0xbd, 0x00, 0x03, 0x00, 0x00 + }; + copy_block(op_load_ad_V2_VR23_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_VD_VR24,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_VD_VR24 +{ + static const uint8 op_load_ad_VD_VR24_code[] = { + 0x8d, 0x85, 0x10, 0x03, 0x00, 0x00, 0x89, 0x85, 0x3c, 0x08, 0x0e, 0x00 + }; + copy_block(op_load_ad_VD_VR24_code, 12); + inc_code_ptr(12); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V0_VR24,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V0_VR24 +{ + static const uint8 op_load_ad_V0_VR24_code[] = { + 0x8d, 0x9d, 0x10, 0x03, 0x00, 0x00 + }; + copy_block(op_load_ad_V0_VR24_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V1_VR24,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V1_VR24 +{ + static const uint8 op_load_ad_V1_VR24_code[] = { + 0x8d, 0xb5, 0x10, 0x03, 0x00, 0x00 + }; + copy_block(op_load_ad_V1_VR24_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V2_VR24,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V2_VR24 +{ + static const uint8 op_load_ad_V2_VR24_code[] = { + 0x8d, 0xbd, 0x10, 0x03, 0x00, 0x00 + }; + copy_block(op_load_ad_V2_VR24_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_VD_VR25,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_VD_VR25 +{ + static const uint8 op_load_ad_VD_VR25_code[] = { + 0x8d, 0x85, 0x20, 0x03, 0x00, 0x00, 0x89, 0x85, 0x3c, 0x08, 0x0e, 0x00 + }; + copy_block(op_load_ad_VD_VR25_code, 12); + inc_code_ptr(12); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V0_VR25,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V0_VR25 +{ + static const uint8 op_load_ad_V0_VR25_code[] = { + 0x8d, 0x9d, 0x20, 0x03, 0x00, 0x00 + }; + copy_block(op_load_ad_V0_VR25_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V1_VR25,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V1_VR25 +{ + static const uint8 op_load_ad_V1_VR25_code[] = { + 0x8d, 0xb5, 0x20, 0x03, 0x00, 0x00 + }; + copy_block(op_load_ad_V1_VR25_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V2_VR25,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V2_VR25 +{ + static const uint8 op_load_ad_V2_VR25_code[] = { + 0x8d, 0xbd, 0x20, 0x03, 0x00, 0x00 + }; + copy_block(op_load_ad_V2_VR25_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_VD_VR26,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_VD_VR26 +{ + static const uint8 op_load_ad_VD_VR26_code[] = { + 0x8d, 0x85, 0x30, 0x03, 0x00, 0x00, 0x89, 0x85, 0x3c, 0x08, 0x0e, 0x00 + }; + copy_block(op_load_ad_VD_VR26_code, 12); + inc_code_ptr(12); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V0_VR26,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V0_VR26 +{ + static const uint8 op_load_ad_V0_VR26_code[] = { + 0x8d, 0x9d, 0x30, 0x03, 0x00, 0x00 + }; + copy_block(op_load_ad_V0_VR26_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V1_VR26,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V1_VR26 +{ + static const uint8 op_load_ad_V1_VR26_code[] = { + 0x8d, 0xb5, 0x30, 0x03, 0x00, 0x00 + }; + copy_block(op_load_ad_V1_VR26_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V2_VR26,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V2_VR26 +{ + static const uint8 op_load_ad_V2_VR26_code[] = { + 0x8d, 0xbd, 0x30, 0x03, 0x00, 0x00 + }; + copy_block(op_load_ad_V2_VR26_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_VD_VR27,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_VD_VR27 +{ + static const uint8 op_load_ad_VD_VR27_code[] = { + 0x8d, 0x85, 0x40, 0x03, 0x00, 0x00, 0x89, 0x85, 0x3c, 0x08, 0x0e, 0x00 + }; + copy_block(op_load_ad_VD_VR27_code, 12); + inc_code_ptr(12); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V0_VR27,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V0_VR27 +{ + static const uint8 op_load_ad_V0_VR27_code[] = { + 0x8d, 0x9d, 0x40, 0x03, 0x00, 0x00 + }; + copy_block(op_load_ad_V0_VR27_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V1_VR27,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V1_VR27 +{ + static const uint8 op_load_ad_V1_VR27_code[] = { + 0x8d, 0xb5, 0x40, 0x03, 0x00, 0x00 + }; + copy_block(op_load_ad_V1_VR27_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V2_VR27,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V2_VR27 +{ + static const uint8 op_load_ad_V2_VR27_code[] = { + 0x8d, 0xbd, 0x40, 0x03, 0x00, 0x00 + }; + copy_block(op_load_ad_V2_VR27_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_VD_VR28,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_VD_VR28 +{ + static const uint8 op_load_ad_VD_VR28_code[] = { + 0x8d, 0x85, 0x50, 0x03, 0x00, 0x00, 0x89, 0x85, 0x3c, 0x08, 0x0e, 0x00 + }; + copy_block(op_load_ad_VD_VR28_code, 12); + inc_code_ptr(12); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V0_VR28,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V0_VR28 +{ + static const uint8 op_load_ad_V0_VR28_code[] = { + 0x8d, 0x9d, 0x50, 0x03, 0x00, 0x00 + }; + copy_block(op_load_ad_V0_VR28_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V1_VR28,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V1_VR28 +{ + static const uint8 op_load_ad_V1_VR28_code[] = { + 0x8d, 0xb5, 0x50, 0x03, 0x00, 0x00 + }; + copy_block(op_load_ad_V1_VR28_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V2_VR28,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V2_VR28 +{ + static const uint8 op_load_ad_V2_VR28_code[] = { + 0x8d, 0xbd, 0x50, 0x03, 0x00, 0x00 + }; + copy_block(op_load_ad_V2_VR28_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_VD_VR29,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_VD_VR29 +{ + static const uint8 op_load_ad_VD_VR29_code[] = { + 0x8d, 0x85, 0x60, 0x03, 0x00, 0x00, 0x89, 0x85, 0x3c, 0x08, 0x0e, 0x00 + }; + copy_block(op_load_ad_VD_VR29_code, 12); + inc_code_ptr(12); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V0_VR29,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V0_VR29 +{ + static const uint8 op_load_ad_V0_VR29_code[] = { + 0x8d, 0x9d, 0x60, 0x03, 0x00, 0x00 + }; + copy_block(op_load_ad_V0_VR29_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V1_VR29,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V1_VR29 +{ + static const uint8 op_load_ad_V1_VR29_code[] = { + 0x8d, 0xb5, 0x60, 0x03, 0x00, 0x00 + }; + copy_block(op_load_ad_V1_VR29_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V2_VR29,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V2_VR29 +{ + static const uint8 op_load_ad_V2_VR29_code[] = { + 0x8d, 0xbd, 0x60, 0x03, 0x00, 0x00 + }; + copy_block(op_load_ad_V2_VR29_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_VD_VR30,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_VD_VR30 +{ + static const uint8 op_load_ad_VD_VR30_code[] = { + 0x8d, 0x85, 0x70, 0x03, 0x00, 0x00, 0x89, 0x85, 0x3c, 0x08, 0x0e, 0x00 + }; + copy_block(op_load_ad_VD_VR30_code, 12); + inc_code_ptr(12); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V0_VR30,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V0_VR30 +{ + static const uint8 op_load_ad_V0_VR30_code[] = { + 0x8d, 0x9d, 0x70, 0x03, 0x00, 0x00 + }; + copy_block(op_load_ad_V0_VR30_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V1_VR30,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V1_VR30 +{ + static const uint8 op_load_ad_V1_VR30_code[] = { + 0x8d, 0xb5, 0x70, 0x03, 0x00, 0x00 + }; + copy_block(op_load_ad_V1_VR30_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V2_VR30,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V2_VR30 +{ + static const uint8 op_load_ad_V2_VR30_code[] = { + 0x8d, 0xbd, 0x70, 0x03, 0x00, 0x00 + }; + copy_block(op_load_ad_V2_VR30_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_VD_VR31,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_VD_VR31 +{ + static const uint8 op_load_ad_VD_VR31_code[] = { + 0x8d, 0x85, 0x80, 0x03, 0x00, 0x00, 0x89, 0x85, 0x3c, 0x08, 0x0e, 0x00 + }; + copy_block(op_load_ad_VD_VR31_code, 12); + inc_code_ptr(12); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V0_VR31,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V0_VR31 +{ + static const uint8 op_load_ad_V0_VR31_code[] = { + 0x8d, 0x9d, 0x80, 0x03, 0x00, 0x00 + }; + copy_block(op_load_ad_V0_VR31_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V1_VR31,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V1_VR31 +{ + static const uint8 op_load_ad_V1_VR31_code[] = { + 0x8d, 0xb5, 0x80, 0x03, 0x00, 0x00 + }; + copy_block(op_load_ad_V1_VR31_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_ad_V2_VR31,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_ad_V2_VR31 +{ + static const uint8 op_load_ad_V2_VR31_code[] = { + 0x8d, 0xbd, 0x80, 0x03, 0x00, 0x00 + }; + copy_block(op_load_ad_V2_VR31_code, 6); + inc_code_ptr(6); +} +#endif + +DEFINE_GEN(gen_op_load_word_VD_T0,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_word_VD_T0 +{ + static const uint8 op_load_word_VD_T0_code[] = { + 0x89, 0xd8, 0x89, 0xda, 0x8b, 0x8d, 0x3c, 0x08, 0x0e, 0x00, 0xc1, 0xea, + 0x02, 0x83, 0xe0, 0xfc, 0x83, 0xe2, 0x03, 0x8b, 0x80, 0x00, 0x00, 0x00, + 0x11, 0x0f, 0xc8, 0x89, 0x04, 0x91 + }; + copy_block(op_load_word_VD_T0_code, 30); + inc_code_ptr(30); +} +#endif + +DEFINE_GEN(gen_op_store_word_VD_T0,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_word_VD_T0 +{ + static const uint8 op_store_word_VD_T0_code[] = { + 0x89, 0xd8, 0x8b, 0x95, 0x3c, 0x08, 0x0e, 0x00, 0x89, 0xd9, 0xc1, 0xe8, + 0x02, 0x83, 0xe1, 0xfc, 0x83, 0xe0, 0x03, 0x8b, 0x04, 0x82, 0x0f, 0xc8, + 0x89, 0x81, 0x00, 0x00, 0x00, 0x11 + }; + copy_block(op_store_word_VD_T0_code, 30); + inc_code_ptr(30); +} +#endif + +DEFINE_GEN(gen_op_load_vect_VD_T0,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_load_vect_VD_T0 +{ + static const uint8 op_load_vect_VD_T0_code[] = { + 0x89, 0xda, 0x8b, 0x8d, 0x3c, 0x08, 0x0e, 0x00, 0x83, 0xe2, 0xf0, 0x8b, + 0x82, 0x00, 0x00, 0x00, 0x11, 0x0f, 0xc8, 0x89, 0x01, 0x8b, 0x8d, 0x3c, + 0x08, 0x0e, 0x00, 0x8b, 0x82, 0x04, 0x00, 0x00, 0x11, 0x0f, 0xc8, 0x89, + 0x41, 0x04, 0x8b, 0x8d, 0x3c, 0x08, 0x0e, 0x00, 0x8b, 0x82, 0x08, 0x00, + 0x00, 0x11, 0x0f, 0xc8, 0x89, 0x41, 0x08, 0x8b, 0x8d, 0x3c, 0x08, 0x0e, + 0x00, 0x8b, 0x82, 0x0c, 0x00, 0x00, 0x11, 0x0f, 0xc8, 0x89, 0x41, 0x0c + }; + copy_block(op_load_vect_VD_T0_code, 72); + inc_code_ptr(72); +} +#endif + +DEFINE_GEN(gen_op_store_vect_VD_T0,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_vect_VD_T0 +{ + static const uint8 op_store_vect_VD_T0_code[] = { + 0x8b, 0x85, 0x3c, 0x08, 0x0e, 0x00, 0x89, 0xda, 0x83, 0xe2, 0xf0, 0x8b, + 0x00, 0x0f, 0xc8, 0x89, 0x82, 0x00, 0x00, 0x00, 0x11, 0x8b, 0x85, 0x3c, + 0x08, 0x0e, 0x00, 0x8b, 0x40, 0x04, 0x0f, 0xc8, 0x89, 0x82, 0x04, 0x00, + 0x00, 0x11, 0x8b, 0x85, 0x3c, 0x08, 0x0e, 0x00, 0x8b, 0x40, 0x08, 0x0f, + 0xc8, 0x89, 0x82, 0x08, 0x00, 0x00, 0x11, 0x8b, 0x85, 0x3c, 0x08, 0x0e, + 0x00, 0x8b, 0x40, 0x0c, 0x0f, 0xc8, 0x89, 0x82, 0x0c, 0x00, 0x00, 0x11 + }; + copy_block(op_store_vect_VD_T0_code, 72); + inc_code_ptr(72); +} +#endif + +DEFINE_GEN(gen_op_record_cr6_VD,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_record_cr6_VD +{ + static const uint8 op_record_cr6_VD_code[] = { + 0x83, 0xec, 0x04, 0x8b, 0x95, 0x3c, 0x08, 0x0e, 0x00, 0xc7, 0x04, 0x24, + 0x00, 0x00, 0x00, 0x00, 0x8b, 0x0a, 0x8b, 0x42, 0x04, 0x21, 0xc8, 0x8b, + 0x4a, 0x08, 0x21, 0xc8, 0x23, 0x42, 0x0c, 0x8d, 0x8d, 0x3c, 0x08, 0x0e, + 0x00, 0x40, 0x75, 0x09, 0xc7, 0x04, 0x24, 0x08, 0x00, 0x00, 0x00, 0xeb, + 0x1f, 0x8b, 0x11, 0x8b, 0x0a, 0x8b, 0x42, 0x04, 0x09, 0xc8, 0x8b, 0x4a, + 0x08, 0x09, 0xc8, 0x0b, 0x42, 0x0c, 0x75, 0x0c, 0xc7, 0x04, 0x24, 0x02, + 0x00, 0x00, 0x00, 0x90, 0x8d, 0x74, 0x26, 0x00, 0xc1, 0x24, 0x24, 0x04, + 0x8b, 0x85, 0x90, 0x03, 0x00, 0x00, 0x8b, 0x0c, 0x24, 0x25, 0x0f, 0xff, + 0xff, 0xff, 0x09, 0xc8, 0x89, 0x85, 0x90, 0x03, 0x00, 0x00, 0x58 + }; + copy_block(op_record_cr6_VD_code, 107); + inc_code_ptr(107); +} +#endif + +DEFINE_GEN(gen_op_mfvscr_VD,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_mfvscr_VD +{ + static const uint8 op_mfvscr_VD_code[] = { + 0x8b, 0x85, 0x3c, 0x08, 0x0e, 0x00, 0xc7, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x8b, 0x85, 0x3c, 0x08, 0x0e, 0x00, 0xc7, 0x40, 0x04, 0x00, 0x00, 0x00, + 0x00, 0x8b, 0x85, 0x3c, 0x08, 0x0e, 0x00, 0xc7, 0x40, 0x08, 0x00, 0x00, + 0x00, 0x00, 0x8b, 0x95, 0x3c, 0x08, 0x0e, 0x00, 0x8b, 0x85, 0x98, 0x03, + 0x00, 0x00, 0x89, 0x42, 0x0c + }; + copy_block(op_mfvscr_VD_code, 53); + inc_code_ptr(53); +} +#endif + +DEFINE_GEN(gen_op_mtvscr_V0,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_mtvscr_V0 +{ + static const uint8 op_mtvscr_V0_code[] = { + 0x8b, 0x43, 0x0c, 0x89, 0x85, 0x98, 0x03, 0x00, 0x00 + }; + copy_block(op_mtvscr_V0_code, 9); + inc_code_ptr(9); +} +#endif + +DEFINE_GEN(gen_op_emms,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_emms +{ + static const uint8 op_emms_code[] = { + 0x0f, 0x77 + }; + copy_block(op_emms_code, 2); + inc_code_ptr(2); +} +#endif + +DEFINE_GEN(gen_op_mmx_vcmpequb,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_mmx_vcmpequb +{ + static const uint8 op_mmx_vcmpequb_code[] = { + 0x8b, 0x85, 0x3c, 0x08, 0x0e, 0x00, 0x0f, 0x6f, 0x03, 0x0f, 0x6f, 0x4b, + 0x08, 0x0f, 0x74, 0x06, 0x0f, 0x74, 0x4e, 0x08, 0x0f, 0x7f, 0x00, 0x0f, + 0x7f, 0x48, 0x08 + }; + copy_block(op_mmx_vcmpequb_code, 27); + inc_code_ptr(27); +} +#endif + +DEFINE_GEN(gen_op_mmx_vcmpequh,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_mmx_vcmpequh +{ + static const uint8 op_mmx_vcmpequh_code[] = { + 0x8b, 0x85, 0x3c, 0x08, 0x0e, 0x00, 0x0f, 0x6f, 0x03, 0x0f, 0x6f, 0x4b, + 0x08, 0x0f, 0x75, 0x06, 0x0f, 0x75, 0x4e, 0x08, 0x0f, 0x7f, 0x00, 0x0f, + 0x7f, 0x48, 0x08 + }; + copy_block(op_mmx_vcmpequh_code, 27); + inc_code_ptr(27); +} +#endif + +DEFINE_GEN(gen_op_mmx_vcmpequw,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_mmx_vcmpequw +{ + static const uint8 op_mmx_vcmpequw_code[] = { + 0x8b, 0x85, 0x3c, 0x08, 0x0e, 0x00, 0x0f, 0x6f, 0x03, 0x0f, 0x6f, 0x4b, + 0x08, 0x0f, 0x76, 0x06, 0x0f, 0x76, 0x4e, 0x08, 0x0f, 0x7f, 0x00, 0x0f, + 0x7f, 0x48, 0x08 + }; + copy_block(op_mmx_vcmpequw_code, 27); + inc_code_ptr(27); +} +#endif + +DEFINE_GEN(gen_op_mmx_vcmpgtsb,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_mmx_vcmpgtsb +{ + static const uint8 op_mmx_vcmpgtsb_code[] = { + 0x8b, 0x85, 0x3c, 0x08, 0x0e, 0x00, 0x0f, 0x6f, 0x03, 0x0f, 0x6f, 0x4b, + 0x08, 0x0f, 0x64, 0x06, 0x0f, 0x64, 0x4e, 0x08, 0x0f, 0x7f, 0x00, 0x0f, + 0x7f, 0x48, 0x08 + }; + copy_block(op_mmx_vcmpgtsb_code, 27); + inc_code_ptr(27); +} +#endif + +DEFINE_GEN(gen_op_mmx_vcmpgtsh,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_mmx_vcmpgtsh +{ + static const uint8 op_mmx_vcmpgtsh_code[] = { + 0x8b, 0x85, 0x3c, 0x08, 0x0e, 0x00, 0x0f, 0x6f, 0x03, 0x0f, 0x6f, 0x4b, + 0x08, 0x0f, 0x65, 0x06, 0x0f, 0x65, 0x4e, 0x08, 0x0f, 0x7f, 0x00, 0x0f, + 0x7f, 0x48, 0x08 + }; + copy_block(op_mmx_vcmpgtsh_code, 27); + inc_code_ptr(27); +} +#endif + +DEFINE_GEN(gen_op_mmx_vcmpgtsw,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_mmx_vcmpgtsw +{ + static const uint8 op_mmx_vcmpgtsw_code[] = { + 0x8b, 0x85, 0x3c, 0x08, 0x0e, 0x00, 0x0f, 0x6f, 0x03, 0x0f, 0x6f, 0x4b, + 0x08, 0x0f, 0x66, 0x06, 0x0f, 0x66, 0x4e, 0x08, 0x0f, 0x7f, 0x00, 0x0f, + 0x7f, 0x48, 0x08 + }; + copy_block(op_mmx_vcmpgtsw_code, 27); + inc_code_ptr(27); +} +#endif + +DEFINE_GEN(gen_op_mmx_vaddubm,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_mmx_vaddubm +{ + static const uint8 op_mmx_vaddubm_code[] = { + 0x8b, 0x85, 0x3c, 0x08, 0x0e, 0x00, 0x0f, 0x6f, 0x03, 0x0f, 0x6f, 0x4b, + 0x08, 0x0f, 0xfc, 0x06, 0x0f, 0xfc, 0x4e, 0x08, 0x0f, 0x7f, 0x00, 0x0f, + 0x7f, 0x48, 0x08 + }; + copy_block(op_mmx_vaddubm_code, 27); + inc_code_ptr(27); +} +#endif + +DEFINE_GEN(gen_op_mmx_vadduhm,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_mmx_vadduhm +{ + static const uint8 op_mmx_vadduhm_code[] = { + 0x8b, 0x85, 0x3c, 0x08, 0x0e, 0x00, 0x0f, 0x6f, 0x03, 0x0f, 0x6f, 0x4b, + 0x08, 0x0f, 0xfd, 0x06, 0x0f, 0xfd, 0x4e, 0x08, 0x0f, 0x7f, 0x00, 0x0f, + 0x7f, 0x48, 0x08 + }; + copy_block(op_mmx_vadduhm_code, 27); + inc_code_ptr(27); +} +#endif + +DEFINE_GEN(gen_op_mmx_vadduwm,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_mmx_vadduwm +{ + static const uint8 op_mmx_vadduwm_code[] = { + 0x8b, 0x85, 0x3c, 0x08, 0x0e, 0x00, 0x0f, 0x6f, 0x03, 0x0f, 0x6f, 0x4b, + 0x08, 0x0f, 0xfe, 0x06, 0x0f, 0xfe, 0x4e, 0x08, 0x0f, 0x7f, 0x00, 0x0f, + 0x7f, 0x48, 0x08 + }; + copy_block(op_mmx_vadduwm_code, 27); + inc_code_ptr(27); +} +#endif + +DEFINE_GEN(gen_op_mmx_vsububm,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_mmx_vsububm +{ + static const uint8 op_mmx_vsububm_code[] = { + 0x8b, 0x85, 0x3c, 0x08, 0x0e, 0x00, 0x0f, 0x6f, 0x03, 0x0f, 0x6f, 0x4b, + 0x08, 0x0f, 0xf8, 0x06, 0x0f, 0xf8, 0x4e, 0x08, 0x0f, 0x7f, 0x00, 0x0f, + 0x7f, 0x48, 0x08 + }; + copy_block(op_mmx_vsububm_code, 27); + inc_code_ptr(27); +} +#endif + +DEFINE_GEN(gen_op_mmx_vsubuhm,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_mmx_vsubuhm +{ + static const uint8 op_mmx_vsubuhm_code[] = { + 0x8b, 0x85, 0x3c, 0x08, 0x0e, 0x00, 0x0f, 0x6f, 0x03, 0x0f, 0x6f, 0x4b, + 0x08, 0x0f, 0xf9, 0x06, 0x0f, 0xf9, 0x4e, 0x08, 0x0f, 0x7f, 0x00, 0x0f, + 0x7f, 0x48, 0x08 + }; + copy_block(op_mmx_vsubuhm_code, 27); + inc_code_ptr(27); +} +#endif + +DEFINE_GEN(gen_op_mmx_vsubuwm,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_mmx_vsubuwm +{ + static const uint8 op_mmx_vsubuwm_code[] = { + 0x8b, 0x85, 0x3c, 0x08, 0x0e, 0x00, 0x0f, 0x6f, 0x03, 0x0f, 0x6f, 0x4b, + 0x08, 0x0f, 0xfa, 0x06, 0x0f, 0xfa, 0x4e, 0x08, 0x0f, 0x7f, 0x00, 0x0f, + 0x7f, 0x48, 0x08 + }; + copy_block(op_mmx_vsubuwm_code, 27); + inc_code_ptr(27); +} +#endif + +DEFINE_GEN(gen_op_mmx_vand,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_mmx_vand +{ + static const uint8 op_mmx_vand_code[] = { + 0x8b, 0x85, 0x3c, 0x08, 0x0e, 0x00, 0x0f, 0x6f, 0x03, 0x0f, 0x6f, 0x4b, + 0x08, 0x0f, 0xdb, 0x06, 0x0f, 0xdb, 0x4e, 0x08, 0x0f, 0x7f, 0x00, 0x0f, + 0x7f, 0x48, 0x08 + }; + copy_block(op_mmx_vand_code, 27); + inc_code_ptr(27); +} +#endif + +DEFINE_GEN(gen_op_mmx_vandc,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_mmx_vandc +{ + static const uint8 op_mmx_vandc_code[] = { + 0x8b, 0x85, 0x3c, 0x08, 0x0e, 0x00, 0x0f, 0x6f, 0x06, 0x0f, 0x6f, 0x4e, + 0x08, 0x0f, 0xdf, 0x03, 0x0f, 0xdf, 0x4b, 0x08, 0x0f, 0x7f, 0x00, 0x0f, + 0x7f, 0x48, 0x08 + }; + copy_block(op_mmx_vandc_code, 27); + inc_code_ptr(27); +} +#endif + +DEFINE_GEN(gen_op_mmx_vor,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_mmx_vor +{ + static const uint8 op_mmx_vor_code[] = { + 0x8b, 0x85, 0x3c, 0x08, 0x0e, 0x00, 0x0f, 0x6f, 0x03, 0x0f, 0x6f, 0x4b, + 0x08, 0x0f, 0xeb, 0x06, 0x0f, 0xeb, 0x4e, 0x08, 0x0f, 0x7f, 0x00, 0x0f, + 0x7f, 0x48, 0x08 + }; + copy_block(op_mmx_vor_code, 27); + inc_code_ptr(27); +} +#endif + +DEFINE_GEN(gen_op_mmx_vxor,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_mmx_vxor +{ + static const uint8 op_mmx_vxor_code[] = { + 0x8b, 0x85, 0x3c, 0x08, 0x0e, 0x00, 0x0f, 0x6f, 0x03, 0x0f, 0x6f, 0x4b, + 0x08, 0x0f, 0xef, 0x06, 0x0f, 0xef, 0x4e, 0x08, 0x0f, 0x7f, 0x00, 0x0f, + 0x7f, 0x48, 0x08 + }; + copy_block(op_mmx_vxor_code, 27); + inc_code_ptr(27); +} +#endif + +DEFINE_GEN(gen_op_mmx_vmaxub,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_mmx_vmaxub +{ + static const uint8 op_mmx_vmaxub_code[] = { + 0x8b, 0x85, 0x3c, 0x08, 0x0e, 0x00, 0x0f, 0x6f, 0x03, 0x0f, 0x6f, 0x4b, + 0x08, 0x0f, 0xde, 0x06, 0x0f, 0xde, 0x4e, 0x08, 0x0f, 0x7f, 0x00, 0x0f, + 0x7f, 0x48, 0x08 + }; + copy_block(op_mmx_vmaxub_code, 27); + inc_code_ptr(27); +} +#endif + +DEFINE_GEN(gen_op_mmx_vminub,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_mmx_vminub +{ + static const uint8 op_mmx_vminub_code[] = { + 0x8b, 0x85, 0x3c, 0x08, 0x0e, 0x00, 0x0f, 0x6f, 0x03, 0x0f, 0x6f, 0x4b, + 0x08, 0x0f, 0xda, 0x06, 0x0f, 0xda, 0x4e, 0x08, 0x0f, 0x7f, 0x00, 0x0f, + 0x7f, 0x48, 0x08 + }; + copy_block(op_mmx_vminub_code, 27); + inc_code_ptr(27); +} +#endif + +DEFINE_GEN(gen_op_mmx_vmaxsh,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_mmx_vmaxsh +{ + static const uint8 op_mmx_vmaxsh_code[] = { + 0x8b, 0x85, 0x3c, 0x08, 0x0e, 0x00, 0x0f, 0x6f, 0x03, 0x0f, 0x6f, 0x4b, + 0x08, 0x0f, 0xee, 0x06, 0x0f, 0xee, 0x4e, 0x08, 0x0f, 0x7f, 0x00, 0x0f, + 0x7f, 0x48, 0x08 + }; + copy_block(op_mmx_vmaxsh_code, 27); + inc_code_ptr(27); +} +#endif + +DEFINE_GEN(gen_op_mmx_vminsh,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_mmx_vminsh +{ + static const uint8 op_mmx_vminsh_code[] = { + 0x8b, 0x85, 0x3c, 0x08, 0x0e, 0x00, 0x0f, 0x6f, 0x03, 0x0f, 0x6f, 0x4b, + 0x08, 0x0f, 0xea, 0x06, 0x0f, 0xea, 0x4e, 0x08, 0x0f, 0x7f, 0x00, 0x0f, + 0x7f, 0x48, 0x08 + }; + copy_block(op_mmx_vminsh_code, 27); + inc_code_ptr(27); +} +#endif + +DEFINE_GEN(gen_op_store_T0_XER,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_store_T0_XER +{ + static const uint8 op_store_T0_XER_code[] = { + 0x83, 0xec, 0x04, 0x8d, 0x85, 0x94, 0x03, 0x00, 0x00, 0x89, 0xda, 0x89, + 0x04, 0x24, 0x89, 0xd8, 0xc1, 0xe8, 0x1f, 0x88, 0x85, 0x94, 0x03, 0x00, + 0x00, 0x8b, 0x0c, 0x24, 0x89, 0xd8, 0xc1, 0xe8, 0x1e, 0x83, 0xe2, 0x7f, + 0x83, 0xe0, 0x01, 0x88, 0x41, 0x01, 0x89, 0xd8, 0xc1, 0xe8, 0x1d, 0x88, + 0x51, 0x03, 0x83, 0xe0, 0x01, 0x88, 0x41, 0x02, 0x58 + }; + copy_block(op_store_T0_XER_code, 57); + inc_code_ptr(57); +} +#endif + +DEFINE_GEN(gen_op_jump_next_A0,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_jump_next_A0 +{ + static const uint8 op_jump_next_A0_code[] = { + 0x8b, 0x95, 0xac, 0x03, 0x00, 0x00, 0x89, 0xd8, 0x39, 0x13, 0x74, 0x24, + 0x89, 0xd0, 0xc1, 0xe8, 0x02, 0x25, 0xff, 0x7f, 0x00, 0x00, 0x8b, 0x84, + 0x85, 0xfc, 0x07, 0x0c, 0x00, 0x85, 0xc0, 0x74, 0x04, 0x39, 0x10, 0x74, + 0x02, 0x31, 0xc0, 0x85, 0xc0, 0x74, 0x08, 0x90, 0x8d, 0x74, 0x26, 0x00, + 0xff, 0x60, 0x40 + }; + copy_block(op_jump_next_A0_code, 51); + inc_code_ptr(51); +} +#endif + +DEFINE_GEN(gen_op_vand_VD_V0_V1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_vand_VD_V0_V1 +{ + static const uint8 op_vand_VD_V0_V1_code[] = { + 0x8b, 0x16, 0x8b, 0x03, 0x8b, 0x8d, 0x3c, 0x08, 0x0e, 0x00, 0x21, 0xd0, + 0x8b, 0x53, 0x04, 0x23, 0x56, 0x04, 0x89, 0x01, 0x89, 0x51, 0x04, 0x8b, + 0x56, 0x08, 0x8b, 0x43, 0x08, 0x8b, 0x8d, 0x3c, 0x08, 0x0e, 0x00, 0x21, + 0xd0, 0x8b, 0x53, 0x0c, 0x23, 0x56, 0x0c, 0x89, 0x41, 0x08, 0x89, 0x51, + 0x0c + }; + copy_block(op_vand_VD_V0_V1_code, 49); + inc_code_ptr(49); +} +#endif + +DEFINE_GEN(gen_op_vandc_VD_V0_V1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_vandc_VD_V0_V1 +{ + static const uint8 op_vandc_VD_V0_V1_code[] = { + 0x8b, 0x06, 0x8b, 0x56, 0x04, 0x8b, 0x8d, 0x3c, 0x08, 0x0e, 0x00, 0xf7, + 0xd0, 0xf7, 0xd2, 0x23, 0x03, 0x23, 0x53, 0x04, 0x89, 0x01, 0x89, 0x51, + 0x04, 0x8b, 0x46, 0x08, 0x8b, 0x56, 0x0c, 0x8b, 0x8d, 0x3c, 0x08, 0x0e, + 0x00, 0xf7, 0xd0, 0xf7, 0xd2, 0x23, 0x43, 0x08, 0x23, 0x53, 0x0c, 0x89, + 0x41, 0x08, 0x89, 0x51, 0x0c + }; + copy_block(op_vandc_VD_V0_V1_code, 53); + inc_code_ptr(53); +} +#endif + +DEFINE_GEN(gen_op_vnor_VD_V0_V1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_vnor_VD_V0_V1 +{ + static const uint8 op_vnor_VD_V0_V1_code[] = { + 0x8b, 0x16, 0x8b, 0x03, 0x8b, 0x8d, 0x3c, 0x08, 0x0e, 0x00, 0x09, 0xd0, + 0x8b, 0x53, 0x04, 0xf7, 0xd0, 0x0b, 0x56, 0x04, 0x89, 0x01, 0xf7, 0xd2, + 0x89, 0x51, 0x04, 0x8b, 0x56, 0x08, 0x8b, 0x43, 0x08, 0x8b, 0x8d, 0x3c, + 0x08, 0x0e, 0x00, 0x09, 0xd0, 0x8b, 0x53, 0x0c, 0x0b, 0x56, 0x0c, 0xf7, + 0xd0, 0x89, 0x41, 0x08, 0xf7, 0xd2, 0x89, 0x51, 0x0c + }; + copy_block(op_vnor_VD_V0_V1_code, 57); + inc_code_ptr(57); +} +#endif + +DEFINE_GEN(gen_op_vor_VD_V0_V1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_vor_VD_V0_V1 +{ + static const uint8 op_vor_VD_V0_V1_code[] = { + 0x8b, 0x16, 0x8b, 0x03, 0x8b, 0x8d, 0x3c, 0x08, 0x0e, 0x00, 0x09, 0xd0, + 0x8b, 0x53, 0x04, 0x0b, 0x56, 0x04, 0x89, 0x01, 0x89, 0x51, 0x04, 0x8b, + 0x56, 0x08, 0x8b, 0x43, 0x08, 0x8b, 0x8d, 0x3c, 0x08, 0x0e, 0x00, 0x09, + 0xd0, 0x8b, 0x53, 0x0c, 0x0b, 0x56, 0x0c, 0x89, 0x41, 0x08, 0x89, 0x51, + 0x0c + }; + copy_block(op_vor_VD_V0_V1_code, 49); + inc_code_ptr(49); +} +#endif + +DEFINE_GEN(gen_op_vxor_VD_V0_V1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_vxor_VD_V0_V1 +{ + static const uint8 op_vxor_VD_V0_V1_code[] = { + 0x8b, 0x16, 0x8b, 0x03, 0x8b, 0x8d, 0x3c, 0x08, 0x0e, 0x00, 0x31, 0xd0, + 0x8b, 0x53, 0x04, 0x33, 0x56, 0x04, 0x89, 0x01, 0x89, 0x51, 0x04, 0x8b, + 0x56, 0x08, 0x8b, 0x43, 0x08, 0x8b, 0x8d, 0x3c, 0x08, 0x0e, 0x00, 0x31, + 0xd0, 0x8b, 0x53, 0x0c, 0x33, 0x56, 0x0c, 0x89, 0x41, 0x08, 0x89, 0x51, + 0x0c + }; + copy_block(op_vxor_VD_V0_V1_code, 49); + inc_code_ptr(49); +} +#endif + +DEFINE_GEN(gen_op_vaddfp_VD_V0_V1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_vaddfp_VD_V0_V1 +{ + static const uint8 op_vaddfp_VD_V0_V1_code[] = { + 0xd9, 0x06, 0x8b, 0x85, 0x3c, 0x08, 0x0e, 0x00, 0xd8, 0x03, 0xd9, 0x18, + 0x8b, 0x85, 0x3c, 0x08, 0x0e, 0x00, 0xd9, 0x46, 0x04, 0xd8, 0x43, 0x04, + 0xd9, 0x58, 0x04, 0x8b, 0x85, 0x3c, 0x08, 0x0e, 0x00, 0xd9, 0x46, 0x08, + 0xd8, 0x43, 0x08, 0xd9, 0x58, 0x08, 0x8b, 0x85, 0x3c, 0x08, 0x0e, 0x00, + 0xd9, 0x46, 0x0c, 0xd8, 0x43, 0x0c, 0xd9, 0x58, 0x0c + }; + copy_block(op_vaddfp_VD_V0_V1_code, 57); + inc_code_ptr(57); +} +#endif + +DEFINE_GEN(gen_op_vsubfp_VD_V0_V1,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_vsubfp_VD_V0_V1 +{ + static const uint8 op_vsubfp_VD_V0_V1_code[] = { + 0xd9, 0x06, 0x8b, 0x85, 0x3c, 0x08, 0x0e, 0x00, 0xd8, 0x2b, 0xd9, 0x18, + 0x8b, 0x85, 0x3c, 0x08, 0x0e, 0x00, 0xd9, 0x46, 0x04, 0xd8, 0x6b, 0x04, + 0xd9, 0x58, 0x04, 0x8b, 0x85, 0x3c, 0x08, 0x0e, 0x00, 0xd9, 0x46, 0x08, + 0xd8, 0x6b, 0x08, 0xd9, 0x58, 0x08, 0x8b, 0x85, 0x3c, 0x08, 0x0e, 0x00, + 0xd9, 0x46, 0x0c, 0xd8, 0x6b, 0x0c, 0xd9, 0x58, 0x0c + }; + copy_block(op_vsubfp_VD_V0_V1_code, 57); + inc_code_ptr(57); +} +#endif + +DEFINE_GEN(gen_op_vmaddfp_VD_V0_V1_V2,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_vmaddfp_VD_V0_V1_V2 +{ + static const uint8 op_vmaddfp_VD_V0_V1_V2_code[] = { + 0xd9, 0x07, 0x8b, 0x85, 0x3c, 0x08, 0x0e, 0x00, 0xd8, 0x0b, 0xd8, 0x06, + 0xd9, 0x18, 0x8b, 0x85, 0x3c, 0x08, 0x0e, 0x00, 0xd9, 0x47, 0x04, 0xd8, + 0x4b, 0x04, 0xd8, 0x46, 0x04, 0xd9, 0x58, 0x04, 0x8b, 0x85, 0x3c, 0x08, + 0x0e, 0x00, 0xd9, 0x47, 0x08, 0xd8, 0x4b, 0x08, 0xd8, 0x46, 0x08, 0xd9, + 0x58, 0x08, 0x8b, 0x85, 0x3c, 0x08, 0x0e, 0x00, 0xd9, 0x47, 0x0c, 0xd8, + 0x4b, 0x0c, 0xd8, 0x46, 0x0c, 0xd9, 0x58, 0x0c + }; + copy_block(op_vmaddfp_VD_V0_V1_V2_code, 68); + inc_code_ptr(68); +} +#endif + +DEFINE_GEN(gen_op_vnmsubfp_VD_V0_V1_V2,void,(void)) +#ifdef DYNGEN_IMPL +#define HAVE_gen_op_vnmsubfp_VD_V0_V1_V2 +{ + static const uint8 op_vnmsubfp_VD_V0_V1_V2_code[] = { + 0xd9, 0x07, 0x8b, 0x85, 0x3c, 0x08, 0x0e, 0x00, 0xd8, 0x0b, 0xd8, 0x26, + 0xd9, 0xe0, 0xd9, 0x18, 0x8b, 0x85, 0x3c, 0x08, 0x0e, 0x00, 0xd9, 0x47, + 0x04, 0xd8, 0x4b, 0x04, 0xd8, 0x66, 0x04, 0xd9, 0xe0, 0xd9, 0x58, 0x04, + 0x8b, 0x85, 0x3c, 0x08, 0x0e, 0x00, 0xd9, 0x47, 0x08, 0xd8, 0x4b, 0x08, + 0xd8, 0x66, 0x08, 0xd9, 0xe0, 0xd9, 0x58, 0x08, 0x8b, 0x85, 0x3c, 0x08, + 0x0e, 0x00, 0xd9, 0x47, 0x0c, 0xd8, 0x4b, 0x0c, 0xd8, 0x66, 0x0c, 0xd9, + 0xe0, 0xd9, 0x58, 0x0c + }; + copy_block(op_vnmsubfp_VD_V0_V1_V2_code, 76); + inc_code_ptr(76); +} +#endif + +#undef DEFINE_CST +#undef DEFINE_GEN diff --git a/SheepShaver/src/Windows/sysdeps.h b/SheepShaver/src/Windows/sysdeps.h index 99834f0c..0d73d2bd 100755 --- a/SheepShaver/src/Windows/sysdeps.h +++ b/SheepShaver/src/Windows/sysdeps.h @@ -41,7 +41,9 @@ #undef _TEXT #include #ifdef __WIN32__ +#define WIN32_LEAN_AND_MEAN #include +#include #endif #include @@ -147,6 +149,19 @@ static inline uint32 do_opt_bswap_32(uint32 x) __asm__ __volatile__ ("bswap %0" : "=r" (v) : "0" (x)); return v; } + +#if defined(__CYGWIN__) || defined(__MINGW32__) + +#define opt_bswap_16 do_opt_bswap_16 +static inline uint16 do_opt_bswap_16(uint16 x) +{ + uint16 v; + __asm__ __volatile__ ("rolw $8, %0" : "=r" (v) : "0" (x)); + return v; +} + +#endif + #endif #endif diff --git a/SheepShaver/src/Windows/user_strings_windows.cpp b/SheepShaver/src/Windows/user_strings_windows.cpp index 32e52d25..eb12de57 100755 --- a/SheepShaver/src/Windows/user_strings_windows.cpp +++ b/SheepShaver/src/Windows/user_strings_windows.cpp @@ -20,7 +20,7 @@ #include "sysdeps.h" #include "user_strings.h" - +#include "util_windows.h" // Platform-specific string definitions user_string_def platform_strings[] = { @@ -86,7 +86,11 @@ static const char *get_volume_name(void) HKEY hHelpKey; DWORD key_type, cbData; - static char volume[256]; + #ifdef _UNICODE + static char out_volume[256]; + #endif + + static TCHAR volume[256]; memset(volume, 0, sizeof(volume)); // Try Windows 2000 key first @@ -123,14 +127,19 @@ static const char *get_volume_name(void) } // Fix the error that some "tweak" apps do. - if (stricmp(volume, "%USERNAME% on %COMPUTER%") == 0) - volume[0] = '\0'; + if (_tcsicmp(volume, TEXT("%USERNAME% on %COMPUTER%")) == 0) + volume[0] = TEXT('\0'); // No volume name found, default to "My Computer" if (volume[0] == 0) - strcpy(volume, "My Computer"); + _tcscpy(volume, TEXT("My Computer")); + #ifdef _UNICODE + strlcpy(out_volume, volume, 256); + return out_volume; + #else return volume; + #endif } diff --git a/SheepShaver/src/include/ether_defs.h b/SheepShaver/src/include/ether_defs.h index 390aee4c..60468d86 100644 --- a/SheepShaver/src/include/ether_defs.h +++ b/SheepShaver/src/include/ether_defs.h @@ -525,7 +525,7 @@ union DL_primitives { struct EnetPacketHeader { uint8 fDestAddr[6]; uint8 fSourceAddr[6]; - nw_uint16 fProto; + uint16 fProto; } PACKED__; struct T8022Header { @@ -548,7 +548,7 @@ struct T8022FullPacketHeader { struct T8022AddressStruct { uint8 fHWAddr[6]; - nw_uint16 fSAP; + uint16 fSAP; uint8 fSNAP[k8022SNAPLength]; } PACKED__; diff --git a/SheepShaver/src/kpx_cpu/include/nvmemfun.hpp b/SheepShaver/src/kpx_cpu/include/nvmemfun.hpp index 830b8ecd..e5df5dab 100644 --- a/SheepShaver/src/kpx_cpu/include/nvmemfun.hpp +++ b/SheepShaver/src/kpx_cpu/include/nvmemfun.hpp @@ -23,6 +23,10 @@ #include +#ifdef __MINGW32__ +#include "vm_alloc.h" +#endif + #if defined __GNUC__ #define HAVE_FAST_NV_MEM_FUN 1 #define MEM_FUN_WORDS 2 @@ -91,11 +95,123 @@ template< class R, class T, class A > class nv_mem_fun1_t : public std::binary_function { typedef R (T::*pmf_t)(A); typedef R (* PF_CONVENTION pf_t)(T *, A x); +#ifdef __MINGW32__ + typedef R (* default_call_conv_pf_t)(T *, A x); +#endif pf_t pf; public: - nv_mem_fun1_t(pmf_t pmf) : pf(nv_mem_fun_of(pmf)) {} + nv_mem_fun1_t(pmf_t pmf) : pf(nv_mem_fun_of(pmf)) { + #ifdef __MINGW32__ + init_func(); + #endif + } R operator()(T *p, A x) const { return (*pf)(p, x); } + + #ifdef __MINGW32__ + + #define NVMEMFUN_THUNK_DEBUG 0 + +private: + #define DO_CONVENTION_CALL_PF_PLACEHOLDER 0x12345678 + + #define DO_CONVENTION_CALL_STATICS + static bool do_convention_call_init_done; + static int do_convention_call_code_len; + static int do_convention_call_pf_offset; + unsigned char * do_convention_call_instance_copy; + + static void init_do_convention_call() { + if (do_convention_call_init_done) return; + + const int max_code_bytes = 100; + const unsigned char last_code_byte_value = 0xc3; + + // figure out the size of the function + unsigned char * func_pos = (unsigned char *) &do_convention_call; + int i; + for (i = 0; i < max_code_bytes; i++) { + if (func_pos[i] == last_code_byte_value) { + break; + } + } + do_convention_call_code_len = i + 1; + + #if NVMEMFUN_THUNK_DEBUG + printf("do_convention_call func size %d ", do_convention_call_code_len); + #endif + + // find the position of the pf placeholder in the function + int placeholder_matches = 0; + for (i = 0; i < do_convention_call_code_len - 3; i++) { + pf_t * cur_ptr = (pf_t*)(func_pos + i); + if (*cur_ptr == (pf_t) DO_CONVENTION_CALL_PF_PLACEHOLDER) { + do_convention_call_pf_offset = i; + #if NVMEMFUN_THUNK_DEBUG + printf("ptr pos offset %x", (uint32)cur_ptr - (uint32)func_pos); + #endif + ++placeholder_matches; + } + } + + #if NVMEMFUN_THUNK_DEBUG + printf("\n"); + fflush(stdout); + #endif + + assert(placeholder_matches == 1); + + do_convention_call_init_done = true; + } + + void init_func() { + if (!do_convention_call_init_done) { + init_do_convention_call(); + } + + // copy do_convention_call and patch in the address of pf + + do_convention_call_instance_copy = (unsigned char *) vm_acquire(do_convention_call_code_len); + // Thunk buffer needs to be around while default_call_conv_ptr() is still in use, + // longer than nv_mem_fun1_t lifetime + //FIXME track the lifetime of this + if (do_convention_call_instance_copy == NULL) return; + unsigned char * func_pos = (unsigned char *) &do_convention_call; + memcpy((void *)do_convention_call_instance_copy, func_pos, do_convention_call_code_len); + + // replace byte sequence in buf copy + *(pf_t*)(do_convention_call_instance_copy + do_convention_call_pf_offset) = pf; + + #if NVMEMFUN_THUNK_DEBUG + printf("patching do_convention_call to %x; func size %d ", do_convention_call_instance_copy, do_convention_call_code_len); + for (int i = 0 ; i < do_convention_call_code_len; i ++) { + printf("%02x ", do_convention_call_instance_copy[i]); + } + printf("\n"); + fflush(stdout); + #endif + + vm_protect(do_convention_call_instance_copy, do_convention_call_code_len, VM_PAGE_READ | VM_PAGE_EXECUTE); + } + + // Cheesy thunk solution to adapt the calling convention: + // do_convention_call accepts the default calling convention and calls pf with PF_CONVENTION + // Each instance makes its own copy of do_convention_call in a buffer and patches the address of pf into it + static R do_convention_call(T * obj, A x) { + pf_t fn = (pf_t) DO_CONVENTION_CALL_PF_PLACEHOLDER; + return (*fn)(obj, x); + } + +public: + + default_call_conv_pf_t default_call_conv_ptr() const { return (default_call_conv_pf_t) do_convention_call_instance_copy; } + + #else + pf_t ptr() const { return pf; } + + #endif + + }; template< class R, class T, class A > diff --git a/SheepShaver/src/kpx_cpu/sheepshaver_glue.cpp b/SheepShaver/src/kpx_cpu/sheepshaver_glue.cpp index 4f1910b2..9b6d8794 100755 --- a/SheepShaver/src/kpx_cpu/sheepshaver_glue.cpp +++ b/SheepShaver/src/kpx_cpu/sheepshaver_glue.cpp @@ -151,9 +151,11 @@ public: // Execute NATIVE_OP routine void execute_native_op(uint32 native_op); + static void call_execute_native_op(powerpc_cpu * cpu, uint32 native_op); // Execute EMUL_OP routine void execute_emul_op(uint32 emul_op); + static void call_execute_emul_op(powerpc_cpu * cpu, uint32 emul_op); // Execute 68k routine void execute_68k(uint32 entry, M68kRegisters *r); @@ -170,6 +172,7 @@ public: #endif // Resource manager thunk void get_resource(uint32 old_get_resource); + static void call_get_resource(powerpc_cpu * cpu, uint32 old_get_resource); // Handle MacOS interrupt void interrupt(uint32 entry); @@ -218,6 +221,10 @@ typedef bit_field< 19, 19 > FN_field; typedef bit_field< 20, 25 > NATIVE_OP_field; typedef bit_field< 26, 31 > EMUL_OP_field; +void sheepshaver_cpu::call_execute_emul_op(powerpc_cpu * cpu, uint32 emul_op) { + static_cast(cpu)->execute_emul_op(emul_op); +} + // Execute EMUL_OP routine void sheepshaver_cpu::execute_emul_op(uint32 emul_op) { @@ -332,7 +339,7 @@ int sheepshaver_cpu::compile1(codegen_context_t & cg_context) }; uint32 old_get_resource = ReadMacInt32(get_resource_ptr[selector - NATIVE_GET_RESOURCE]); typedef void (*func_t)(dyngen_cpu_base, uint32); - func_t func = (func_t)nv_mem_fun(&sheepshaver_cpu::get_resource).ptr(); + func_t func = &sheepshaver_cpu::call_get_resource; dg.gen_invoke_CPU_im(func, old_get_resource); status = COMPILE_CODE_OK; break; @@ -421,7 +428,7 @@ int sheepshaver_cpu::compile1(codegen_context_t & cg_context) // Invoke NativeOp handler if (!FN_field::test(opcode)) { typedef void (*func_t)(dyngen_cpu_base, uint32); - func_t func = (func_t)nv_mem_fun(&sheepshaver_cpu::execute_native_op).ptr(); + func_t func = &sheepshaver_cpu::call_execute_native_op; dg.gen_invoke_CPU_im(func, selector); cg_context.done_compile = false; status = COMPILE_CODE_OK; @@ -445,7 +452,7 @@ int sheepshaver_cpu::compile1(codegen_context_t & cg_context) #else // Invoke EmulOp handler typedef void (*func_t)(dyngen_cpu_base, uint32); - func_t func = (func_t)nv_mem_fun(&sheepshaver_cpu::execute_emul_op).ptr(); + func_t func = &sheepshaver_cpu::call_execute_emul_op; dg.gen_invoke_CPU_im(func, emul_op); cg_context.done_compile = false; status = COMPILE_CODE_OK; @@ -685,6 +692,10 @@ inline void sheepshaver_cpu::execute_ppc(uint32 entry) lr() = saved_lr; } +void sheepshaver_cpu::call_get_resource(powerpc_cpu * cpu, uint32 old_get_resource) { + static_cast(cpu)->get_resource(old_get_resource); +} + // Resource Manager thunk inline void sheepshaver_cpu::get_resource(uint32 old_get_resource) { @@ -897,14 +908,14 @@ void init_emul_op_trampolines(basic_dyngen & dg) // EmulOp emul_op_trampoline = dg.gen_start(); - func = (func_t)nv_mem_fun(&sheepshaver_cpu::execute_emul_op).ptr(); + func = &sheepshaver_cpu::call_execute_emul_op; dg.gen_invoke_CPU_T0(func); dg.gen_exec_return(); dg.gen_end(); // NativeOp native_op_trampoline = dg.gen_start(); - func = (func_t)nv_mem_fun(&sheepshaver_cpu::execute_native_op).ptr(); + func = &sheepshaver_cpu::call_execute_native_op; dg.gen_invoke_CPU_T0(func); dg.gen_exec_return(); dg.gen_end(); @@ -1030,6 +1041,10 @@ void HandleInterrupt(powerpc_registers *r) } } +void sheepshaver_cpu::call_execute_native_op(powerpc_cpu * cpu, uint32 selector) { + static_cast(cpu)->execute_native_op(selector); +} + // Execute NATIVE_OP routine void sheepshaver_cpu::execute_native_op(uint32 selector) { diff --git a/SheepShaver/src/kpx_cpu/src/cpu/ppc/ppc-cpu.cpp b/SheepShaver/src/kpx_cpu/src/cpu/ppc/ppc-cpu.cpp index 4654a86a..eefa1f95 100644 --- a/SheepShaver/src/kpx_cpu/src/cpu/ppc/ppc-cpu.cpp +++ b/SheepShaver/src/kpx_cpu/src/cpu/ppc/ppc-cpu.cpp @@ -64,6 +64,12 @@ int register_info_compare(const void *e1, const void *e2) static int ppc_refcount = 0; +#ifdef DO_CONVENTION_CALL_STATICS +template<> bool nv_mem_fun1_t::do_convention_call_init_done = false; +template<> int nv_mem_fun1_t::do_convention_call_code_len = 0; +template<> int nv_mem_fun1_t::do_convention_call_pf_offset = 0; +#endif + void powerpc_cpu::set_register(int id, any_register const & value) { if (id >= powerpc_registers::GPR(0) && id <= powerpc_registers::GPR(31)) { @@ -542,7 +548,12 @@ bool powerpc_cpu::check_spcflags() } #if DYNGEN_DIRECT_BLOCK_CHAINING -void *powerpc_cpu::compile_chain_block(block_info *sbi) +void * powerpc_cpu::call_compile_chain_block(powerpc_cpu * the_cpu, block_info *sbi) +{ + return the_cpu->compile_chain_block(sbi); +} + +void * PF_CONVENTION powerpc_cpu::compile_chain_block(block_info *sbi) { // Block index is stuffed into the source basic block pointer, // which is aligned at least on 4-byte boundaries @@ -719,7 +730,11 @@ void powerpc_cpu::execute(uint32 entry) if (is_logging()) record_step(opcode); #endif +#ifdef __MINGW32__ + assert(ii->execute.default_call_conv_ptr() != 0); +#else assert(ii->execute.ptr() != 0); +#endif ii->execute(this, opcode); #if PPC_EXECUTE_DUMP_STATE if (dump_state) diff --git a/SheepShaver/src/kpx_cpu/src/cpu/ppc/ppc-cpu.hpp b/SheepShaver/src/kpx_cpu/src/cpu/ppc/ppc-cpu.hpp index c418386e..f1739a5f 100644 --- a/SheepShaver/src/kpx_cpu/src/cpu/ppc/ppc-cpu.hpp +++ b/SheepShaver/src/kpx_cpu/src/cpu/ppc/ppc-cpu.hpp @@ -371,8 +371,10 @@ private: friend class powerpc_jit; powerpc_jit codegen; block_info *compile_block(uint32 entry); + static void call_do_record_step(powerpc_cpu * cpu, uint32 pc, uint32 opcode); #if DYNGEN_DIRECT_BLOCK_CHAINING void *compile_chain_block(block_info *sbi); + static void * call_compile_chain_block(powerpc_cpu * the_cpu, block_info *sbi); #endif #endif @@ -389,6 +391,7 @@ private: // Instruction handlers void execute_nop(uint32 opcode); void execute_illegal(uint32 opcode); + static void call_execute_illegal(powerpc_cpu * cpu, uint32 opcode); template< class RA, class RB, class RC, class CA, class OE, class Rc > void execute_addition(uint32 opcode); template< class OP, class RD, class RA, class RB, class RC, class OE, class Rc > @@ -453,6 +456,7 @@ private: void execute_icbi(uint32 opcode); void execute_isync(uint32 opcode); void execute_invalidate_cache_range(); + static void call_execute_invalidate_cache_range(powerpc_cpu * cpu); template< class RA, class RB > void execute_dcbz(uint32 opcode); template< bool SL > diff --git a/SheepShaver/src/kpx_cpu/src/cpu/ppc/ppc-decode.cpp b/SheepShaver/src/kpx_cpu/src/cpu/ppc/ppc-decode.cpp index 972f26ec..6c5c7ad9 100644 --- a/SheepShaver/src/kpx_cpu/src/cpu/ppc/ppc-decode.cpp +++ b/SheepShaver/src/kpx_cpu/src/cpu/ppc/ppc-decode.cpp @@ -470,11 +470,21 @@ const powerpc_cpu::instr_info_t powerpc_cpu::powerpc_ii_table[] = { PPC_I(FNMSUBS), A_form, 59, 30, CFLOW_NORMAL }, + { "fres", + EXECUTE_FP_ARITH(double, fres, RD, RB, NONE, NONE, RC_BIT_G, true), + PPC_I(FRES), + A_form, 59, 24, CFLOW_NORMAL + }, { "frsp", EXECUTE_1(fp_round, RC_BIT_G), PPC_I(FRSP), X_form, 63, 12, CFLOW_NORMAL }, + { "frsqrte", + EXECUTE_FP_ARITH(double, frsqrte, RD, RB, NONE, NONE, RC_BIT_G, true), + PPC_I(FRSQRTE), + A_form, 63, 26, CFLOW_NORMAL + }, { "fsel", EXECUTE_FP_ARITH(double, fsel, RD, RA, RC, RB, RC_BIT_G, false), PPC_I(FSEL), @@ -1551,7 +1561,7 @@ const powerpc_cpu::instr_info_t powerpc_cpu::powerpc_ii_table[] = { VX_form, 4, 132, CFLOW_NORMAL }, { "vrsqrtefp", - EXECUTE_VECTOR_ARITH(frsqrt, V4SF, NONE, V4SF, NONE), + EXECUTE_VECTOR_ARITH(frsqrte, V4SF, NONE, V4SF, NONE), PPC_I(VRSQRTEFP), VX_form, 4, 330, CFLOW_NORMAL }, diff --git a/SheepShaver/src/kpx_cpu/src/cpu/ppc/ppc-execute.cpp b/SheepShaver/src/kpx_cpu/src/cpu/ppc/ppc-execute.cpp index ec366e59..8e2ccac0 100644 --- a/SheepShaver/src/kpx_cpu/src/cpu/ppc/ppc-execute.cpp +++ b/SheepShaver/src/kpx_cpu/src/cpu/ppc/ppc-execute.cpp @@ -90,6 +90,7 @@ static inline int ppc_to_native_rounding_mode(int round) case 2: return FE_UPWARD; case 3: return FE_DOWNWARD; } + return FE_TONEAREST; } /** diff --git a/SheepShaver/src/kpx_cpu/src/cpu/ppc/ppc-instructions.hpp b/SheepShaver/src/kpx_cpu/src/cpu/ppc/ppc-instructions.hpp index c42b61d1..6e5b9891 100644 --- a/SheepShaver/src/kpx_cpu/src/cpu/ppc/ppc-instructions.hpp +++ b/SheepShaver/src/kpx_cpu/src/cpu/ppc/ppc-instructions.hpp @@ -99,7 +99,9 @@ enum powerpc_instruction { PPC_I(FNMADDS), PPC_I(FNMSUB), PPC_I(FNMSUBS), + PPC_I(FRES), PPC_I(FRSP), + PPC_I(FRSQRTE), PPC_I(FSEL), PPC_I(FSUB), PPC_I(FSUBS), diff --git a/SheepShaver/src/kpx_cpu/src/cpu/ppc/ppc-jit.cpp b/SheepShaver/src/kpx_cpu/src/cpu/ppc/ppc-jit.cpp index 4b294401..57163a5b 100644 --- a/SheepShaver/src/kpx_cpu/src/cpu/ppc/ppc-jit.cpp +++ b/SheepShaver/src/kpx_cpu/src/cpu/ppc/ppc-jit.cpp @@ -36,6 +36,11 @@ powerpc_jit::powerpc_jit(dyngen_cpu_base cpu) { } +// An operand that refers to an address relative to the emulated machine +static x86_memory_operand vm_memory_operand(int32 d, int b, int i = X86_NOREG, int s = 1) { + return x86_memory_operand(d + VMBaseDiff, b, i, s); +} + bool powerpc_jit::initialize(void) { if (!powerpc_dyngen::initialize()) @@ -239,21 +244,25 @@ bool powerpc_jit::initialize(void) // Dispatch mid-level code generators bool powerpc_jit::gen_vector_1(int mnemo, int vD) { + if (jit_info[mnemo]->handler == (gen_handler_t)&powerpc_jit::gen_not_available) return false; return (this->*((bool (powerpc_jit::*)(int, int))jit_info[mnemo]->handler))(mnemo, vD); } bool powerpc_jit::gen_vector_2(int mnemo, int vD, int vA, int vB) { + if (jit_info[mnemo]->handler == (gen_handler_t)&powerpc_jit::gen_not_available) return false; return (this->*((bool (powerpc_jit::*)(int, int, int, int))jit_info[mnemo]->handler))(mnemo, vD, vA, vB); } bool powerpc_jit::gen_vector_3(int mnemo, int vD, int vA, int vB, int vC) { + if (jit_info[mnemo]->handler == (gen_handler_t)&powerpc_jit::gen_not_available) return false; return (this->*((bool (powerpc_jit::*)(int, int, int, int, int))jit_info[mnemo]->handler))(mnemo, vD, vA, vB, vC); } bool powerpc_jit::gen_vector_compare(int mnemo, int vD, int vA, int vB, bool Rc) { + if (jit_info[mnemo]->handler == (gen_handler_t)&powerpc_jit::gen_not_available) return false; return (this->*((bool (powerpc_jit::*)(int, int, int, int, bool))jit_info[mnemo]->handler))(mnemo, vD, vA, vB, Rc); } @@ -395,8 +404,8 @@ bool powerpc_jit::gen_x86_lvx(int mnemo, int vD, int rA, int rB) gen_add_32(x86_memory_operand(xPPC_GPR(rA), REG_CPU_ID), REG_T0_ID); gen_and_32(x86_immediate_operand(-16), REG_T0_ID); #if SIZEOF_VOID_P == 8 - gen_mov_64(x86_memory_operand(0, REG_T0_ID), REG_T1_ID); - gen_mov_64(x86_memory_operand(8, REG_T0_ID), REG_T2_ID); + gen_mov_64(vm_memory_operand(0, REG_T0_ID), REG_T1_ID); + gen_mov_64(vm_memory_operand(8, REG_T0_ID), REG_T2_ID); gen_bswap_64(REG_T1_ID); gen_bswap_64(REG_T2_ID); gen_rol_64(x86_immediate_operand(32), REG_T1_ID); @@ -404,14 +413,14 @@ bool powerpc_jit::gen_x86_lvx(int mnemo, int vD, int rA, int rB) gen_mov_64(REG_T1_ID, x86_memory_operand(xPPC_VR(vD) + 0, REG_CPU_ID)); gen_mov_64(REG_T2_ID, x86_memory_operand(xPPC_VR(vD) + 8, REG_CPU_ID)); #else - gen_mov_32(x86_memory_operand(0*4, REG_T0_ID), REG_T1_ID); - gen_mov_32(x86_memory_operand(1*4, REG_T0_ID), REG_T2_ID); + gen_mov_32(vm_memory_operand(0*4, REG_T0_ID), REG_T1_ID); + gen_mov_32(vm_memory_operand(1*4, REG_T0_ID), REG_T2_ID); gen_bswap_32(REG_T1_ID); gen_bswap_32(REG_T2_ID); gen_mov_32(REG_T1_ID, x86_memory_operand(xPPC_VR(vD) + 0*4, REG_CPU_ID)); gen_mov_32(REG_T2_ID, x86_memory_operand(xPPC_VR(vD) + 1*4, REG_CPU_ID)); - gen_mov_32(x86_memory_operand(2*4, REG_T0_ID), REG_T1_ID); - gen_mov_32(x86_memory_operand(3*4, REG_T0_ID), REG_T2_ID); + gen_mov_32(vm_memory_operand(2*4, REG_T0_ID), REG_T1_ID); + gen_mov_32(vm_memory_operand(3*4, REG_T0_ID), REG_T2_ID); gen_bswap_32(REG_T1_ID); gen_bswap_32(REG_T2_ID); gen_mov_32(REG_T1_ID, x86_memory_operand(xPPC_VR(vD) + 2*4, REG_CPU_ID)); @@ -435,8 +444,8 @@ bool powerpc_jit::gen_x86_stvx(int mnemo, int vS, int rA, int rB) gen_and_32(x86_immediate_operand(-16), REG_T0_ID); gen_rol_64(x86_immediate_operand(32), REG_T1_ID); gen_rol_64(x86_immediate_operand(32), REG_T2_ID); - gen_mov_64(REG_T1_ID, x86_memory_operand(0, REG_T0_ID)); - gen_mov_64(REG_T2_ID, x86_memory_operand(8, REG_T0_ID)); + gen_mov_64(REG_T1_ID, vm_memory_operand(0, REG_T0_ID)); + gen_mov_64(REG_T2_ID, vm_memory_operand(8, REG_T0_ID)); #else gen_mov_32(x86_memory_operand(xPPC_VR(vS) + 0*4, REG_CPU_ID), REG_T1_ID); gen_mov_32(x86_memory_operand(xPPC_VR(vS) + 1*4, REG_CPU_ID), REG_T2_ID); @@ -445,14 +454,14 @@ bool powerpc_jit::gen_x86_stvx(int mnemo, int vS, int rA, int rB) gen_bswap_32(REG_T1_ID); gen_bswap_32(REG_T2_ID); gen_and_32(x86_immediate_operand(-16), REG_T0_ID); - gen_mov_32(REG_T1_ID, x86_memory_operand(0*4, REG_T0_ID)); - gen_mov_32(REG_T2_ID, x86_memory_operand(1*4, REG_T0_ID)); + gen_mov_32(REG_T1_ID, vm_memory_operand(0*4, REG_T0_ID)); + gen_mov_32(REG_T2_ID, vm_memory_operand(1*4, REG_T0_ID)); gen_mov_32(x86_memory_operand(xPPC_VR(vS) + 2*4, REG_CPU_ID), REG_T1_ID); gen_mov_32(x86_memory_operand(xPPC_VR(vS) + 3*4, REG_CPU_ID), REG_T2_ID); gen_bswap_32(REG_T1_ID); gen_bswap_32(REG_T2_ID); - gen_mov_32(REG_T1_ID, x86_memory_operand(2*4, REG_T0_ID)); - gen_mov_32(REG_T2_ID, x86_memory_operand(3*4, REG_T0_ID)); + gen_mov_32(REG_T1_ID, vm_memory_operand(2*4, REG_T0_ID)); + gen_mov_32(REG_T2_ID, vm_memory_operand(3*4, REG_T0_ID)); #endif return true; } @@ -667,7 +676,7 @@ void powerpc_jit::gen_sse2_vsplat(int vD, int rValue) } // vspltisb -bool powerpc_jit::gen_sse2_vspltisb(int mnemo, int vD, int SIMM) +bool powerpc_jit::gen_sse2_vspltisb(int mnemo, int vD, int SIMM, int unused) { switch (SIMM) { case 0: @@ -718,7 +727,7 @@ bool powerpc_jit::gen_sse2_vspltisb(int mnemo, int vD, int SIMM) } // vspltish -bool powerpc_jit::gen_sse2_vspltish(int mnemo, int vD, int SIMM) +bool powerpc_jit::gen_sse2_vspltish(int mnemo, int vD, int SIMM, int unused) { switch (SIMM) { case 0: @@ -764,7 +773,7 @@ bool powerpc_jit::gen_sse2_vspltish(int mnemo, int vD, int SIMM) } // vspltisw -bool powerpc_jit::gen_sse2_vspltisw(int mnemo, int vD, int SIMM) +bool powerpc_jit::gen_sse2_vspltisw(int mnemo, int vD, int SIMM, int unused) { switch (SIMM) { case 0: @@ -866,7 +875,7 @@ bool powerpc_jit::gen_ssse3_lvx(int mnemo, int vD, int rA, int rB) gen_and_32(x86_immediate_operand(-16), REG_T0_ID); x86_memory_operand vswapmask(gen_ssse3_vswap_mask(), X86_NOREG); - gen_movdqa(x86_memory_operand(0, REG_T0_ID), REG_V0_ID); + gen_movdqa(vm_memory_operand(0, REG_T0_ID), REG_V0_ID); gen_insn(X86_INSN_SSE_3P, X86_SSSE3_PSHUFB, vswapmask, REG_V0_ID); gen_movdqa(REG_V0_ID, x86_memory_operand(xPPC_VR(vD), REG_CPU_ID)); return true; @@ -883,7 +892,7 @@ bool powerpc_jit::gen_ssse3_stvx(int mnemo, int vS, int rA, int rB) x86_memory_operand vswapmask(gen_ssse3_vswap_mask(), X86_NOREG); gen_movdqa(x86_memory_operand(xPPC_VR(vS), REG_CPU_ID), REG_V0_ID); gen_insn(X86_INSN_SSE_3P, X86_SSSE3_PSHUFB, vswapmask, REG_V0_ID); - gen_movdqa(REG_V0_ID, x86_memory_operand(0, REG_T0_ID)); + gen_movdqa(REG_V0_ID, vm_memory_operand(0, REG_T0_ID)); return true; } diff --git a/SheepShaver/src/kpx_cpu/src/cpu/ppc/ppc-jit.hpp b/SheepShaver/src/kpx_cpu/src/cpu/ppc/ppc-jit.hpp index a8e563ae..2117c5a7 100644 --- a/SheepShaver/src/kpx_cpu/src/cpu/ppc/ppc-jit.hpp +++ b/SheepShaver/src/kpx_cpu/src/cpu/ppc/ppc-jit.hpp @@ -90,9 +90,9 @@ private: bool gen_sse2_vsel(int mnemo, int vD, int vA, int vB, int vC); bool gen_sse2_vsldoi(int mnemo, int vD, int vA, int vB, int SH); void gen_sse2_vsplat(int vD, int rValue); - bool gen_sse2_vspltisb(int mnemo, int vD, int SIMM); - bool gen_sse2_vspltish(int mnemo, int vD, int SIMM); - bool gen_sse2_vspltisw(int mnemo, int vD, int SIMM); + bool gen_sse2_vspltisb(int mnemo, int vD, int SIMM, int unused); + bool gen_sse2_vspltish(int mnemo, int vD, int SIMM, int unused); + bool gen_sse2_vspltisw(int mnemo, int vD, int SIMM, int unused); bool gen_sse2_vspltb(int mnemo, int vD, int UIMM, int vB); bool gen_sse2_vsplth(int mnemo, int vD, int UIMM, int vB); bool gen_sse2_vspltw(int mnemo, int vD, int UIMM, int vB); diff --git a/SheepShaver/src/kpx_cpu/src/cpu/ppc/ppc-operations.hpp b/SheepShaver/src/kpx_cpu/src/cpu/ppc/ppc-operations.hpp index 47b56493..50719ffa 100644 --- a/SheepShaver/src/kpx_cpu/src/cpu/ppc/ppc-operations.hpp +++ b/SheepShaver/src/kpx_cpu/src/cpu/ppc/ppc-operations.hpp @@ -153,7 +153,7 @@ DEFINE_OP2(fsubs, float, x - y); DEFINE_OP1(exp2, float, exp2f(x)); DEFINE_OP1(log2, float, log2f(x)); DEFINE_OP1(fres, float, 1 / x); -DEFINE_OP1(frsqrt, float, 1 / sqrt(x)); +DEFINE_OP1(frsqrte, float, 1 / sqrt(x)); DEFINE_OP1(frsim, float, floorf(x)); DEFINE_OP1(frsin, float, roundf(x)); DEFINE_OP1(frsip, float, ceilf(x)); diff --git a/SheepShaver/src/kpx_cpu/src/cpu/ppc/ppc-translate.cpp b/SheepShaver/src/kpx_cpu/src/cpu/ppc/ppc-translate.cpp index 7d023147..fe882373 100644 --- a/SheepShaver/src/kpx_cpu/src/cpu/ppc/ppc-translate.cpp +++ b/SheepShaver/src/kpx_cpu/src/cpu/ppc/ppc-translate.cpp @@ -125,6 +125,22 @@ static void disasm_translation(uint32 src_addr, uint32 src_len, **/ #if PPC_ENABLE_JIT + +void +powerpc_cpu::call_do_record_step(powerpc_cpu * cpu, uint32 param1, uint32 param2) { + cpu->do_record_step(param1, param2); +} + +void +powerpc_cpu::call_execute_invalidate_cache_range(powerpc_cpu * cpu) { + cpu->execute_invalidate_cache_range(); +} + +void +powerpc_cpu::call_execute_illegal(powerpc_cpu * cpu, uint32 param1) { + cpu->execute_illegal(param1); +} + powerpc_cpu::block_info * powerpc_cpu::compile_block(uint32 entry_point) { @@ -169,7 +185,7 @@ powerpc_cpu::compile_block(uint32 entry_point) #if PPC_FLIGHT_RECORDER if (is_logging()) { typedef void (*func_t)(dyngen_cpu_base, uint32, uint32); - func_t func = (func_t)nv_mem_fun((execute_pmf)&powerpc_cpu::do_record_step).ptr(); + func_t func = &powerpc_cpu::call_do_record_step; dg.gen_invoke_CPU_im_im(func, dpc, opcode); } #endif @@ -1120,7 +1136,7 @@ powerpc_cpu::compile_block(uint32 entry_point) case PPC_I(ISYNC): // Instruction synchronize { typedef void (*func_t)(dyngen_cpu_base); - func_t func = (func_t)nv_mem_fun(&powerpc_cpu::execute_invalidate_cache_range).ptr(); + func_t func = &powerpc_cpu::call_execute_invalidate_cache_range; dg.gen_invoke_CPU(func); break; } @@ -1377,10 +1393,17 @@ powerpc_cpu::compile_block(uint32 entry_point) case PPC_I(STVEWX): case PPC_I(STVX): case PPC_I(STVXL): + { assert(vD_field::mask() == vS_field::mask()); assert(vA_field::mask() == rA_field::mask()); assert(vB_field::mask() == rB_field::mask()); - // fall-through + const int vD = vD_field::extract(opcode); + const int vA = vA_field::extract(opcode); + const int vB = vB_field::extract(opcode); + if (!dg.gen_vector_2(ii->mnemo, vD, vA, vB)) + goto do_generic; + break; + } case PPC_I(VCMPEQFP): case PPC_I(VCMPEQUB): case PPC_I(VCMPEQUH): @@ -1488,10 +1511,14 @@ powerpc_cpu::compile_block(uint32 entry_point) typedef void (*func_t)(dyngen_cpu_base, uint32); func_t func; do_generic: + #ifdef __MINGW32__ + func = (func_t)ii->execute.default_call_conv_ptr(); + #else func = (func_t)ii->execute.ptr(); + #endif goto do_invoke; do_illegal: - func = (func_t)nv_mem_fun(&powerpc_cpu::execute_illegal).ptr(); + func = &powerpc_cpu::call_execute_illegal; goto do_invoke; do_invoke: #if PPC_PROFILE_GENERIC_CALLS @@ -1554,7 +1581,7 @@ powerpc_cpu::compile_block(uint32 entry_point) // Generate backpatch trampolines if (use_direct_block_chaining) { typedef void *(*func_t)(dyngen_cpu_base); - func_t func = (func_t)nv_mem_fun(&powerpc_cpu::compile_chain_block).ptr(); + func_t func = (func_t)&powerpc_cpu::call_compile_chain_block; for (int i = 0; i < block_info::MAX_TARGETS; i++) { if (bi->li[i].jmp_pc != block_info::INVALID_PC) { uint8 *p = dg.gen_align(16); diff --git a/SheepShaver/src/kpx_cpu/src/mathlib/mathlib.cpp b/SheepShaver/src/kpx_cpu/src/mathlib/mathlib.cpp index d51a8db2..dc8a8d94 100644 --- a/SheepShaver/src/kpx_cpu/src/mathlib/mathlib.cpp +++ b/SheepShaver/src/kpx_cpu/src/mathlib/mathlib.cpp @@ -88,6 +88,7 @@ int mathlib_fpclassify (double x) int mathlib_fpclassifyl(long double x) { unimplemented("fpclassifyl"); + return -1; } @@ -114,6 +115,7 @@ int mathlib_signbit (double x) int mathlib_signbitl(long double x) { unimplemented("signbitl"); + return -1; } diff --git a/SheepShaver/src/macos_util.cpp b/SheepShaver/src/macos_util.cpp index 87eabb3d..6a3f9644 100644 --- a/SheepShaver/src/macos_util.cpp +++ b/SheepShaver/src/macos_util.cpp @@ -327,6 +327,10 @@ uint32 TimeToMacTime(time_t t) // Convert to number of seconds elapsed since 1-Jan-1904 #ifdef WIN32 + if (t == -1) { + // failsafe as this will segfault + return 0; + } struct tm *local = localtime(&t); #else struct tm result;