hackjackhack / jia32 Goto Github PK
View Code? Open in Web Editor NEWJulia-based IA32 emulator
Julia-based IA32 emulator
It seems that rflags_compute! and rflags_compute_XXX! involve too many unstable conversions and possible exceptions. The generated code contains lots of jl_XXX.
Filename: /home/jack/julia/jia32/CPU.jl
Source line: 406
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $72, %rsp
movq %rdi, %r14
movq $8, -88(%rbp)
Source line: 406
movabsq $jl_pgcstack, %rax
movq (%rax), %rcx
movq %rcx, -80(%rbp)
leaq -88(%rbp), %rcx
movq %rcx, (%rax)
movq $0, -56(%rbp)
movq $0, -48(%rbp)
movq $0, -72(%rbp)
leaq -64(%rbp), %rax
movl $1, -92(%rbp)
Source line: 406
movabsq $jl_apply_generic, %rbx
movq %rsi, -64(%rbp)
movabsq $140323016195184, %rdi # imm = 0x7F9F7F88BC70
movq %rax, %rsi
movq %rax, %r12
movl $1, %edx
callq *%rbx
movq %rax, %r13
movq %r13, -72(%rbp)
Source line: 407
movq 120(%r14), %r15
subq 128(%r14), %r15
jb L155
movl $0, -92(%rbp)
L155: movabsq $140323002320504, %rax # imm = 0x7F9F7EB50678
Source line: 410
movq (%rax), %rax
movq %rax, -64(%rbp)
movabsq $140323025118760, %rax # imm = 0x7F9F8010E628
movq (%rax), %rax
movq %rax, -56(%rbp)
movzbl %r15b, %edi
incq %rdi
movabsq $jl_box_uint64, %rax
callq *%rax
movq %rax, -48(%rbp)
movabsq $140323016939728, %rdi # imm = 0x7F9F7F9418D0
leaq -56(%rbp), %rsi
movl $2, %edx
callq *%rbx
movq %rax, -56(%rbp)
movabsq $140323015385200, %rdi # imm = 0x7F9F7F7C6070
movq %r12, %rsi
movl $2, %edx
callq *%rbx
movabsq $35080746978788, %rcx # imm = 0x1FE7DF764DE4
movq -8(%rax), %rdx
shrq $2, %rdx
cmpq %rcx, %rdx
jne L614
Source line: 411
movq 120(%r14), %rbx
movq 128(%r14), %rcx
Source line: 410
movq %rcx, -104(%rbp)
movl (%rax), %eax
movl %eax, -108(%rbp)
Source line: 412
movq %r15, %rdi
Source line: 410
movabsq $jl_box_uint64, %rax
Source line: 412
callq *%rax
movq %rax, -64(%rbp)
movq %r13, -56(%rbp)
movabsq $jl_apply_generic, %r13
movabsq $140323018277136, %rdi # imm = 0x7F9F7FA88110
movq %r12, %rsi
movl $2, %edx
callq *%r13
movabsq $140323020865472, %rcx # imm = 0x7F9F7FCFFFC0
movq %rax, -64(%rbp)
movq %rcx, -56(%rbp)
movabsq $140322989929328, %rdi # imm = 0x7F9F7DF7F370
movq %r12, %rsi
movl $2, %edx
callq *%r13
movabsq $35080746877316, %rcx # imm = 0x1FE7DF74C184
movq -8(%rax), %rdx
shrq $2, %rdx
cmpq %rcx, %rdx
jne L665
movl $64, %r9d
movabsq $jl_false, %rcx
cmpq (%rcx), %rax
jne L452
xorl %r9d, %r9d
L452: movl $8, %ecx
Source line: 413
subq 112(%r14), %rcx
movq %rcx, %rax
sarq $63, %rax
addq %rax, %rcx
xorq %rax, %rcx
Source line: 414
movq 120(%r14), %rax
movq %rax, %rdx
xorq %r15, %rdx
xorq 128(%r14), %rax
andq %rdx, %rax
Source line: 413
movq %r15, %rdi
shrq %cl, %rdi
movq $-2262, %rsi # imm = 0xFFFFFFFFFFFFF72A
Source line: 414
shrq %cl, %rax
Source line: 416
andq 32(%r14), %rsi
movl -108(%rbp), %edx
Source line: 417
orl -92(%rbp), %edx
movabsq $jl_pgcstack, %r8
Source line: 413
andl $128, %edi
Source line: 411
xorl %r15d, %ebx
xorl %r10d, %r10d
Source line: 414
shlq $4, %rax
andl $2048, %eax # imm = 0x800
Source line: 413
cmpq $63, %rcx
Source line: 414
cmoval %r10d, %eax
Source line: 413
cmoval %r10d, %edi
Source line: 411
movq -104(%rbp), %rcx
xorl %ecx, %ebx
andl $16, %ebx
Source line: 417
orl %edx, %ebx
orl %r9d, %ebx
orl %edi, %ebx
orl %eax, %ebx
orq %rsi, %rbx
movq %rbx, 32(%r14)
movq -80(%rbp), %rax
movq %rax, (%r8)
movq %rbx, %rax
addq $72, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
ret
Source line: 410
L614: movabsq $jl_type_error_rt_line, %rbx
movabsq $140331654624464, %rdi # imm = 0x7FA1826CB4D0
movabsq $140331654623259, %rsi # imm = 0x7FA1826CB01B
movabsq $140322987915152, %rdx # imm = 0x7F9F7DD93790
movq %rax, %rcx
movl $410, %r8d # imm = 0x19A
callq *%rbx
Source line: 412
L665: movabsq $jl_type_error_rt_line, %rbx
movabsq $140331654624464, %rdi # imm = 0x7FA1826CB4D0
movabsq $140331654623345, %rsi # imm = 0x7FA1826CB071
movabsq $140322987509264, %rdx # imm = 0x7F9F7DD30610
movq %rax, %rcx
movl $412, %r8d # imm = 0x19C
callq *%rbx
If multiple instruction are JITed in one block, variable a and b may be assigned with different types.
b = @reg_r(cpu,UInt16,0x00)
...
b = 0x00 #may be 8-bit imm
Suggest: Fix the type of a and b to be UInt64.
Once I git pull the source, and I try to run the main.jl.
But it turned out to be an error
"ERROR: LoadError: LoadError: LoadError: LoadError: could not open file /..../jia32/instr/opc_list.jl"
I found the op_list.jl is added into .git_ignore
Is it an mistake or should I do something more for correction ?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.