xg15 16 hours ago

It also says the multiplier must be one of 2, 4 or 8.

So I guess this trick then only works for multiplication by 2, 3, 4, 5, 8 or 9?

  • stassats 15 hours ago

    The tricks to avoid multiplication (and division) are probably worth a whole post.

      x * 6:
      lea eax, [rdi+rdi*2]
      add eax, eax
    
      x * 7:
      lea eax, [0+rdi*8]
      sub eax, edi
      
      x * 11:
      lea eax, [rdi+rdi*4]
      lea eax, [rdi+rax*2]
    
    But with -Os you get imul eax, edi, 6

    And on modern CPUs multiplication might not be actually all that slow (but there may be fewer multiply units).

    • mattgodbolt 9 hours ago

      Hey now; let's not get ahead too far :) I'm trying to keep each one bite-sized...I don't think you'll be (too) disappointed at the next few episodes :)