Print this page
3544 save-args matcher could be considerably more robust
3545 save-args matcher should accept saves may be out-of-order
Reviewed by: Joshua M. Clulow <josh@sysmgr.org>
Reviewed by: Robert Mustacchi <rm@joyent.com>

*** 62,71 **** --- 62,82 ---- movq %rsi,-0x10(%rbp) movq %rdi,-0x8(%rbp) subq $0x50,%rsp SET_SIZE(gcc_mov_basic, gcc_mov_basic_end) + FUNC(gcc_mov_noorder) + pushq %rbp + movq %rsp, %rbp + movq %rcx,-0x20(%rbp) + movq %rbx,-0x28(%rbp) + movq %rdi,-0x8(%rbp) + movq %rdx,-0x18(%rbp) + movq %rsi,-0x10(%rbp) + subq $0x50,%rsp + SET_SIZE(gcc_mov_noorder, gcc_mov_noorder_end) + FUNC(gcc_mov_big_struct_ret) pushq %rbp movq %rsp,%rbp movq %rbx,-0x28(%rbp) movq %r8,-0x20(%rbp)
*** 73,82 **** --- 84,104 ---- movq %rdx,-0x10(%rbp) movq %rsi,-0x8(%rbp) subq $0x50,%rsp SET_SIZE(gcc_mov_big_struct_ret, gcc_mov_big_struct_ret_end) + FUNC(gcc_mov_struct_noorder) + pushq %rbp + movq %rsp,%rbp + movq %rcx,-0x18(%rbp) + movq %r8,-0x20(%rbp) + movq %rsi,-0x8(%rbp) + movq %rdx,-0x10(%rbp) + movq %rbx,-0x28(%rbp) + subq $0x50,%rsp + SET_SIZE(gcc_mov_struct_noorder, gcc_mov_struct_noorder_end) + FUNC(gcc_mov_big_struct_ret_and_spill) pushq %rbp movq %rsp,%rbp movq %rbx,-0x38(%rbp) movq %r9,-0x28(%rbp)
*** 144,163 **** --- 166,205 ---- pushq %rdx pushq %rcx subq $0x20,%rsp SET_SIZE(gcc_push_basic, gcc_push_basic_end) + FUNC(gcc_push_noorder) + pushq %rbp + movq %rsp,%rbp + pushq %rsi + pushq %rdi + pushq %rcx + pushq %rdx + subq $0x20,%rsp + SET_SIZE(gcc_push_noorder, gcc_push_noorder_end) + FUNC(gcc_push_big_struct_ret) pushq %rbp movq %rsp,%rbp pushq %rsi pushq %rdx pushq %rcx pushq %r8 subq $0x30,%rsp SET_SIZE(gcc_push_big_struct_ret, gcc_push_big_struct_ret_end) + FUNC(gcc_push_struct_noorder) + pushq %rbp + movq %rsp,%rbp + pushq %rdx + pushq %rsi + pushq %r8 + pushq %rcx + subq $0x30,%rsp + SET_SIZE(gcc_push_struct_noorder, gcc_push_struct_noorder_end) + FUNC(gcc_push_big_struct_ret_and_spill) pushq %rbp movq %rsp,%rbp pushq %rsi pushq %rdx
*** 392,396 **** --- 434,454 ---- movq %rdx,-0x18(%rbp) movq %rsi,-0x10(%rbp) movq %rdi,-0x8(%rbp) subq $0x50,%rsp SET_SIZE(small_struct_arg_by_value, small_struct_arg_by_value_end) + + FUNC(interleaved_argument_saves) + pushq %rbp + movq %rdi,%rax + shlq $0x21,%rax + movq %rsp,%rbp + shrq $0x29,%rax + subq $0x30,%rsp + movq %rdi,-0x8(%rbp) + movq %rbx,-0x28(%rbp) + movzbl %dil,%edi + movq %rcx,-0x20(%rbp) + movq %rdx,-0x18(%rbp) + movq %rsi,-0x10(%rbp) + movq 0x0(,%rax,8),%rax + SET_SIZE(interleaved_argument_saves, interleaved_argument_saves_end)