Performance Y86体系结构立即数VS寄存器算法效率问题

Performance Y86体系结构立即数VS寄存器算法效率问题,performance,assembly,micro-optimization,y86,immediate-operand,Performance,Assembly,Micro Optimization,Y86,Immediate Operand,我正在与计算机体系结构课程的一个团队一起研究Y86程序,以实现乘法函数imul。我们有一个可以工作的代码块,但我们正试图尽可能提高执行时间效率。目前,imul的模块如下所示: imul: # push all used registers to stack for preservation pushq %rdi pushq %rsi pushq %r8 pushq %r9 pushq %r10 irmovq 0, %r9

我正在与计算机体系结构课程的一个团队一起研究Y86程序,以实现乘法函数imul。我们有一个可以工作的代码块,但我们正试图尽可能提高执行时间效率。目前,imul的模块如下所示:

imul:
    # push all used registers to stack for preservation
    pushq %rdi
    pushq %rsi
    pushq %r8
    pushq %r9
    pushq %r10
    
    irmovq 0, %r9       # set 0 into r9
    rrmovq %rdi, %r10   # preserve rdi in r10
    subq %rsi, %rdi     # compare rdi and rsi
    rrmovq %r10, %rdi   # restore rdi
    jl continue         # if rdi (looping value/count) less than rsi, don't swap
    
swap:
    # swap rsi and rdi to make rdi smaller value of the two
    rrmovq %rsi, %rdi
    rrmovq %r10, %rsi
    
continue: 
    subq %r9, %rdi      # check if rdi is zero
    cmove %r9, %rax     # if rdi = 0, rax = 0
    je imulDone         # if rdi = 0, jump to end
    irmovq 1, %r8       # set 1 into r8
    rrmovq %rsi, %rax   # set rax equal to initial value from rsi
    
imulLoop:
    subq %r8, %rdi      # count - 1
    je imulDone         # if count = 0, jump to end
    addq %rsi, %rax     # add another instance of rsi into rax, looped adition
    jmp imulLoop        # restart loop
    
imulDone:
    # pop all used registers from stack to original values and return 
    popq %r10
    popq %r9
    popq %r8
    popq %rsi
    popq %rdi
    ret  

现在我们最好的办法是使用即时算术指令(isubq等)代替普通的OPq指令,将常量设置到寄存器中并使用这些寄存器在这种情况下,这种方法会更有效率吗?非常感谢

Y86是一种教学语言,不是真正的机器,不是吗?那么,谁知道哪个更快呢?我想您可以在模拟器中对其进行基准测试,但所有模拟器可能都不一样。@NateEldredge它是一种教学语言,如果您想这样称呼它,它是一种“简化”语言,更像是简化版的x86。我想我追求的前提是如果(一般来说,如果可以这样说的话),立即运算比将常数保存到寄存器并使用寄存器到寄存器的运算“更有效”。我知道有很多因素会影响到这一点,我只是好奇,对于汇编代码来说,这是否是更好的执行时间实践。您的y86一开始是否有
isubq
?我见过的大多数y86-64指令列表只提供reg形式的ALU指令。e、 g.(有趣的是,它还显示了5级经典RISC流水线中每个insn的微体系结构效应;立即指令和寄存器指令的成本与主流x86 CPU相同,假设由于包含立即指令的较大指令而没有前端解码暂停。)@PeterCordes我们使用的y86版本具有即时算术/iOPq指令。我不确定y86的某些版本是否不包括它们,但我们的教科书讨论了它们,我们在课堂上已经学习了很多次,很像x86或(如果我没记错的话,现在我已经学习了2年多)MIPS。为了编写这段代码,我的团队使用了一个基于web的y86模拟器,这个模拟器允许即时值指令。我已经缩短了上述代码很多,因为张贴,并使用即时算法已经奏效。