Skip to content

rflags_compute! and rflags_compute_XXX! need to be optimized #3

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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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