Hi Jan, Uros,

i386.md has

(define_insn "*sse_prologue_save_insn"
  [(set (mem:BLK (plus:DI (match_operand:DI 0 "register_operand" "R")
                          (match_operand:DI 4 "const_int_operand" "n")))
        (unspec:BLK [(reg:DI 21)
                     (reg:DI 22)
                     (reg:DI 23)
                     (reg:DI 24)
                     (reg:DI 25)
                     (reg:DI 26)
                     (reg:DI 27)
                     (reg:DI 28)] UNSPEC_SSE_PROLOGUE_SAVE))
   (use (match_operand:DI 1 "register_operand" "r"))
   (use (match_operand:DI 2 "const_int_operand" "i"))
   (use (label_ref:DI (match_operand 3 "" "X")))]
  "TARGET_64BIT
   && INTVAL (operands[4]) + SSE_REGPARM_MAX * 16 - 16 < 128
   && INTVAL (operands[4]) + INTVAL (operands[2]) * 16 >= -128"
{
...
}
  [(set_attr "type" "other")
   (set_attr "length_immediate" "0")
   (set_attr "length_address" "0")
   (set_attr "length" "135")
   (set_attr "memory" "store")
   (set_attr "modrm" "0")
   (set_attr "mode" "DI")])

Why is the length 135? I saw

        jmp     *%rdx   # 12    *sse_prologue_save_insn [length = 135]
        movaps  %xmm7, -15(%rax)
        movaps  %xmm6, -31(%rax)
        movaps  %xmm5, -47(%rax)
        movaps  %xmm4, -63(%rax)
        movaps  %xmm3, -79(%rax)
        movaps  %xmm2, -95(%rax)
        movaps  %xmm1, -111(%rax)
        movaps  %xmm0, -127(%rax)

which is 34 bytes.


H.J.

Reply via email to