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

Optimisation 03: Reuse reg iso LIMM #112

Open
shahab-vahedi opened this issue Mar 2, 2023 · 0 comments
Open

Optimisation 03: Reuse reg iso LIMM #112

shahab-vahedi opened this issue Mar 2, 2023 · 0 comments
Assignees

Comments

@shahab-vahedi
Copy link
Member

Having the following code:

long long func(long long m)
{
  return m * 0x82345678;
}

results in an assembly like:

$ arc-elf32-gcc -O3 func.c -S -o -
        .file   "func.c"
        .cpu HS
        .arc_attribute Tag_ARC_PCS_config, 2
        .arc_attribute Tag_ARC_ABI_rf16, 0
        .arc_attribute Tag_ARC_ABI_pic, 0
        .arc_attribute Tag_ARC_ABI_tls, 0
        .arc_attribute Tag_ARC_ABI_sda, 2
        .arc_attribute Tag_ARC_ABI_exceptions, 0
        .arc_attribute Tag_ARC_CPU_variation, 2
        .section        .text
        .align 4
        .global func
        .type   func, @function
func:
        mov_s   r12,-2110499208 ;13
        mpy     r1,r1,-2110499208
        mpymu   r3,r0,r12
        mpy     r2,r0,r12
        add_s   r3,r1,r3 ;1
        mov_s   r0,r2   ;4
        j_s.d   [blink]
        mov_s   r1,r3   ;4
        .size   func, .-func
        .ident  "GCC: (ARCompact/ARCv2 ISA elf32 toolchain) 10.2.0"
        .section        .note.GNU-stack,"",@progbits

But there are rooms for improvement:

  mov_s   r12,-2110499208     \
  mpy     r1,r1,-2110499208   |          mov_s   r12,-2110499208
  mpymu   r3,r0,r12           |          mpy_s   r1,r1,r12
  mpy     r2,r0,r12           |========> mpymu   r3,r0,r12
  add_s   r3,r1,r3            |          mpy_s   r0,r0,r12
  mov_s   r0,r2               |          j_s.d   [blink]
  j_s.d   [blink]             |          add_s   r1,r1,r3
  mov_s   r1,r3               /
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants