Skip to content

rflags_compute! and rflags_compute_XXX! need to be optimized #3

@hackjackhack

Description

@hackjackhack

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions