Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

rflags_compute! and rflags_compute_XXX! need to be optimized #3

Open
hackjackhack opened this issue Jun 25, 2015 · 2 comments
Open

Comments

@hackjackhack
Copy link
Owner

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
@GlacierW
Copy link
Collaborator

A branch is spawned in my fork to work on the optimization.
Any further progress/difficulty will be reported here.

@hackjackhack
Copy link
Owner Author

This can wait. We can come back to this issue after main features are done.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants