余りに無駄が多いので、せめて機械語にしてみました、
理論上も、実際も、上記のスクリプトと比べて、三倍近く早いですが、やはり無駄が多いです。
C言語で比較式を書いてしまうのが一番いいでしょう。
#include "kernel32.as"
#module cmp_usinglong
#deffunc init_cmpuslong
#define BUFFSIZE_CUSL 0x00000053
if(cusl==0){
// 下の配列はこのスクリプトを機械語化したもの
;int cul(DWORD a , DWORD b){
;return (a==b ? 0 : (a>b ? -1,1));}
cusl =0x81ec8b55,0x0000c4ec,0x57565300,0xff3cbd8d,0x31b9ffff,0xb8000000,0xcccccccc,0x458babf3,0x0c453b08,0x85c70c75
cusl(0x000a)=0xffffff3c,0x00000000,0x4d8b14eb,0x0c4d3908,0xe283d21b,0x01c283fe,0xff3c9589,0x858bffff,0xffffff3c,0x8b5b5e5f
cusl(0x0014)=0xc35de5
VirtualProtect varptr(cusl),BUFFSIZE_CUSL,0x40,varptr(res)
}
return
#define global ctype cmpuslong(%1=prm) callfunc(%1,varptr(cusl@cmp_usinglong),2)
#global
init_cmpuslong
prm = 0xFFFFFFFF,0
cmpuslong()