1*702941cdSRichard Lowe/* 2*702941cdSRichard Lowe * This file and its contents are supplied under the terms of the 3*702941cdSRichard Lowe * Common Development and Distribution License ("CDDL"), version 1.0. 4*702941cdSRichard Lowe * You may only use this file in accordance with the terms of version 5*702941cdSRichard Lowe * 1.0 of the CDDL. 6*702941cdSRichard Lowe * 7*702941cdSRichard Lowe * A full copy of the text of the CDDL should have accompanied this 8*702941cdSRichard Lowe * source. A copy of the CDDL is also available via the Internet at 9*702941cdSRichard Lowe * http://www.illumos.org/license/CDDL. 10*702941cdSRichard Lowe */ 11*702941cdSRichard Lowe 12*702941cdSRichard Lowe/* 13*702941cdSRichard Lowe * Copyright 2012, Richard Lowe. 14*702941cdSRichard Lowe */ 15*702941cdSRichard Lowe 16*702941cdSRichard Lowe#define FUNC(x) \ 17*702941cdSRichard Lowe .text; \ 18*702941cdSRichard Lowe .align 16; \ 19*702941cdSRichard Lowe .globl x; \ 20*702941cdSRichard Lowe .type x, @function; \ 21*702941cdSRichard Lowex: 22*702941cdSRichard Lowe 23*702941cdSRichard Lowe#define SET_SIZE(x, x_size) \ 24*702941cdSRichard Lowe .size x, [.-x]; \ 25*702941cdSRichard Lowe .globl x_size; \ 26*702941cdSRichard Lowe .type x_size, @object; \ 27*702941cdSRichard Lowex_size: 28*702941cdSRichard Lowe 29*702941cdSRichard Lowe/* 30*702941cdSRichard Lowe * Extracted versions of the functional tests 31*702941cdSRichard Lowe * 32*702941cdSRichard Lowe * Named of the form <compiler>-<prologue style>-<nature of test> 33*702941cdSRichard Lowe * basic -- A regular function 34*702941cdSRichard Lowe * align -- odd number of arguments needing save-area 35*702941cdSRichard Lowe * alignment 36*702941cdSRichard Lowe * big-struct-ret -- returns a > 16byte structure by value 37*702941cdSRichard Lowe * big-struct-ret-and-spill -- returns a > 16byte structure by value and 38*702941cdSRichard Lowe * spills args to the stack 39*702941cdSRichard Lowe * small-struct-ret -- returns a < 16byte structure by value 40*702941cdSRichard Lowe * small-struct-ret-and-spill -- returns a < 16byte structure by value and 41*702941cdSRichard Lowe * spills args to the stack 42*702941cdSRichard Lowe * stack-spill -- spills arguments to the stack 43*702941cdSRichard Lowe */ 44*702941cdSRichard LoweFUNC(gcc_mov_align) 45*702941cdSRichard Lowepushq %rbp 46*702941cdSRichard Lowemovq %rsp, %rbp 47*702941cdSRichard Lowemovq %rbx, -0x38(%rbp) 48*702941cdSRichard Lowemovq %r8, -0x28(%rbp) 49*702941cdSRichard Lowemovq %rcx, -0x20(%rbp) 50*702941cdSRichard Lowemovq %rdx, -0x18(%rbp) 51*702941cdSRichard Lowemovq %rsi, -0x10(%rbp) 52*702941cdSRichard Lowemovq %rdi, -0x8(%rbp) 53*702941cdSRichard Lowesubq $0x70, %rsp 54*702941cdSRichard LoweSET_SIZE(gcc_mov_align, gcc_mov_align_end) 55*702941cdSRichard Lowe 56*702941cdSRichard LoweFUNC(gcc_mov_basic) 57*702941cdSRichard Lowepushq %rbp 58*702941cdSRichard Lowemovq %rsp, %rbp 59*702941cdSRichard Lowemovq %rbx,-0x28(%rbp) 60*702941cdSRichard Lowemovq %rcx,-0x20(%rbp) 61*702941cdSRichard Lowemovq %rdx,-0x18(%rbp) 62*702941cdSRichard Lowemovq %rsi,-0x10(%rbp) 63*702941cdSRichard Lowemovq %rdi,-0x8(%rbp) 64*702941cdSRichard Lowesubq $0x50,%rsp 65*702941cdSRichard LoweSET_SIZE(gcc_mov_basic, gcc_mov_basic_end) 66*702941cdSRichard Lowe 67*702941cdSRichard LoweFUNC(gcc_mov_noorder) 68*702941cdSRichard Lowepushq %rbp 69*702941cdSRichard Lowemovq %rsp, %rbp 70*702941cdSRichard Lowemovq %rcx,-0x20(%rbp) 71*702941cdSRichard Lowemovq %rbx,-0x28(%rbp) 72*702941cdSRichard Lowemovq %rdi,-0x8(%rbp) 73*702941cdSRichard Lowemovq %rdx,-0x18(%rbp) 74*702941cdSRichard Lowemovq %rsi,-0x10(%rbp) 75*702941cdSRichard Lowesubq $0x50,%rsp 76*702941cdSRichard LoweSET_SIZE(gcc_mov_noorder, gcc_mov_noorder_end) 77*702941cdSRichard Lowe 78*702941cdSRichard LoweFUNC(gcc_mov_big_struct_ret) 79*702941cdSRichard Lowepushq %rbp 80*702941cdSRichard Lowemovq %rsp,%rbp 81*702941cdSRichard Lowemovq %rbx,-0x28(%rbp) 82*702941cdSRichard Lowemovq %r8,-0x20(%rbp) 83*702941cdSRichard Lowemovq %rcx,-0x18(%rbp) 84*702941cdSRichard Lowemovq %rdx,-0x10(%rbp) 85*702941cdSRichard Lowemovq %rsi,-0x8(%rbp) 86*702941cdSRichard Lowesubq $0x50,%rsp 87*702941cdSRichard LoweSET_SIZE(gcc_mov_big_struct_ret, gcc_mov_big_struct_ret_end) 88*702941cdSRichard Lowe 89*702941cdSRichard LoweFUNC(gcc_mov_struct_noorder) 90*702941cdSRichard Lowepushq %rbp 91*702941cdSRichard Lowemovq %rsp,%rbp 92*702941cdSRichard Lowemovq %rcx,-0x18(%rbp) 93*702941cdSRichard Lowemovq %r8,-0x20(%rbp) 94*702941cdSRichard Lowemovq %rsi,-0x8(%rbp) 95*702941cdSRichard Lowemovq %rdx,-0x10(%rbp) 96*702941cdSRichard Lowemovq %rbx,-0x28(%rbp) 97*702941cdSRichard Lowesubq $0x50,%rsp 98*702941cdSRichard LoweSET_SIZE(gcc_mov_struct_noorder, gcc_mov_struct_noorder_end) 99*702941cdSRichard Lowe 100*702941cdSRichard LoweFUNC(gcc_mov_big_struct_ret_and_spill) 101*702941cdSRichard Lowepushq %rbp 102*702941cdSRichard Lowemovq %rsp,%rbp 103*702941cdSRichard Lowemovq %rbx,-0x38(%rbp) 104*702941cdSRichard Lowemovq %r9,-0x28(%rbp) 105*702941cdSRichard Lowemovq %r8,-0x20(%rbp) 106*702941cdSRichard Lowemovq %rcx,-0x18(%rbp) 107*702941cdSRichard Lowemovq %rdx,-0x10(%rbp) 108*702941cdSRichard Lowemovq %rsi,-0x8(%rbp) 109*702941cdSRichard Lowesubq $0x90,%rsp 110*702941cdSRichard LoweSET_SIZE(gcc_mov_big_struct_ret_and_spill, gcc_mov_big_struct_ret_and_spill_end) 111*702941cdSRichard Lowe 112*702941cdSRichard LoweFUNC(gcc_mov_small_struct_ret) 113*702941cdSRichard Lowepushq %rbp 114*702941cdSRichard Lowemovq %rsp,%rbp 115*702941cdSRichard Lowemovq %rbx,-0x28(%rbp) 116*702941cdSRichard Lowemovq %rcx,-0x20(%rbp) 117*702941cdSRichard Lowemovq %rdx,-0x18(%rbp) 118*702941cdSRichard Lowemovq %rsi,-0x10(%rbp) 119*702941cdSRichard Lowemovq %rdi,-0x8(%rbp) 120*702941cdSRichard Lowesubq $0x50,%rsp 121*702941cdSRichard LoweSET_SIZE(gcc_mov_small_struct_ret, gcc_mov_small_struct_ret_end) 122*702941cdSRichard Lowe 123*702941cdSRichard LoweFUNC(gcc_mov_small_struct_ret_and_spill) 124*702941cdSRichard Lowepushq %rbp 125*702941cdSRichard Lowemovq %rsp,%rbp 126*702941cdSRichard Lowemovq %rbx,-0x38(%rbp) 127*702941cdSRichard Lowemovq %r9,-0x30(%rbp) 128*702941cdSRichard Lowemovq %r8,-0x28(%rbp) 129*702941cdSRichard Lowemovq %rcx,-0x20(%rbp) 130*702941cdSRichard Lowemovq %rdx,-0x18(%rbp) 131*702941cdSRichard Lowemovq %rsi,-0x10(%rbp) 132*702941cdSRichard Lowemovq %rdi,-0x8(%rbp) 133*702941cdSRichard Lowesubq $0x90,%rsp 134*702941cdSRichard LoweSET_SIZE(gcc_mov_small_struct_ret_and_spill, gcc_mov_small_struct_ret_and_spill_end) 135*702941cdSRichard Lowe 136*702941cdSRichard LoweFUNC(gcc_mov_stack_spill) 137*702941cdSRichard Lowepushq %rbp 138*702941cdSRichard Lowemovq %rsp,%rbp 139*702941cdSRichard Lowemovq %rbx,-0x38(%rbp) 140*702941cdSRichard Lowemovq %r9,-0x30(%rbp) 141*702941cdSRichard Lowemovq %r8,-0x28(%rbp) 142*702941cdSRichard Lowemovq %rcx,-0x20(%rbp) 143*702941cdSRichard Lowemovq %rdx,-0x18(%rbp) 144*702941cdSRichard Lowemovq %rsi,-0x10(%rbp) 145*702941cdSRichard Lowemovq %rdi,-0x8(%rbp) 146*702941cdSRichard Lowesubq $0x90,%rsp 147*702941cdSRichard LoweSET_SIZE(gcc_mov_stack_spill, gcc_mov_stack_spill_end) 148*702941cdSRichard Lowe 149*702941cdSRichard LoweFUNC(gcc_push_align) 150*702941cdSRichard Lowepushq %rbp 151*702941cdSRichard Lowemovq %rsp,%rbp 152*702941cdSRichard Lowepushq %rdi 153*702941cdSRichard Lowepushq %rsi 154*702941cdSRichard Lowepushq %rdx 155*702941cdSRichard Lowepushq %rcx 156*702941cdSRichard Lowepushq %r8 157*702941cdSRichard Lowesubq $0x8,%rsp 158*702941cdSRichard Lowesubq $0x30,%rsp 159*702941cdSRichard LoweSET_SIZE(gcc_push_align, gcc_push_align_end) 160*702941cdSRichard Lowe 161*702941cdSRichard LoweFUNC(gcc_push_basic) 162*702941cdSRichard Lowepushq %rbp 163*702941cdSRichard Lowemovq %rsp,%rbp 164*702941cdSRichard Lowepushq %rdi 165*702941cdSRichard Lowepushq %rsi 166*702941cdSRichard Lowepushq %rdx 167*702941cdSRichard Lowepushq %rcx 168*702941cdSRichard Lowesubq $0x20,%rsp 169*702941cdSRichard LoweSET_SIZE(gcc_push_basic, gcc_push_basic_end) 170*702941cdSRichard Lowe 171*702941cdSRichard LoweFUNC(gcc_push_noorder) 172*702941cdSRichard Lowepushq %rbp 173*702941cdSRichard Lowemovq %rsp,%rbp 174*702941cdSRichard Lowepushq %rsi 175*702941cdSRichard Lowepushq %rdi 176*702941cdSRichard Lowepushq %rcx 177*702941cdSRichard Lowepushq %rdx 178*702941cdSRichard Lowesubq $0x20,%rsp 179*702941cdSRichard LoweSET_SIZE(gcc_push_noorder, gcc_push_noorder_end) 180*702941cdSRichard Lowe 181*702941cdSRichard LoweFUNC(gcc_push_big_struct_ret) 182*702941cdSRichard Lowepushq %rbp 183*702941cdSRichard Lowemovq %rsp,%rbp 184*702941cdSRichard Lowepushq %rsi 185*702941cdSRichard Lowepushq %rdx 186*702941cdSRichard Lowepushq %rcx 187*702941cdSRichard Lowepushq %r8 188*702941cdSRichard Lowesubq $0x30,%rsp 189*702941cdSRichard LoweSET_SIZE(gcc_push_big_struct_ret, gcc_push_big_struct_ret_end) 190*702941cdSRichard Lowe 191*702941cdSRichard LoweFUNC(gcc_push_struct_noorder) 192*702941cdSRichard Lowepushq %rbp 193*702941cdSRichard Lowemovq %rsp,%rbp 194*702941cdSRichard Lowepushq %rdx 195*702941cdSRichard Lowepushq %rsi 196*702941cdSRichard Lowepushq %r8 197*702941cdSRichard Lowepushq %rcx 198*702941cdSRichard Lowesubq $0x30,%rsp 199*702941cdSRichard LoweSET_SIZE(gcc_push_struct_noorder, gcc_push_struct_noorder_end) 200*702941cdSRichard Lowe 201*702941cdSRichard LoweFUNC(gcc_push_big_struct_ret_and_spill) 202*702941cdSRichard Lowepushq %rbp 203*702941cdSRichard Lowemovq %rsp,%rbp 204*702941cdSRichard Lowepushq %rsi 205*702941cdSRichard Lowepushq %rdx 206*702941cdSRichard Lowepushq %rcx 207*702941cdSRichard Lowepushq %r8 208*702941cdSRichard Lowepushq %r9 209*702941cdSRichard Lowesubq $0x8,%rsp 210*702941cdSRichard Lowesubq $0x50,%rsp 211*702941cdSRichard LoweSET_SIZE(gcc_push_big_struct_ret_and_spill, gcc_push_big_struct_ret_and_spill_end) 212*702941cdSRichard Lowe 213*702941cdSRichard LoweFUNC(gcc_push_small_struct_ret) 214*702941cdSRichard Lowepushq %rbp 215*702941cdSRichard Lowemovq %rsp,%rbp 216*702941cdSRichard Lowepushq %rdi 217*702941cdSRichard Lowepushq %rsi 218*702941cdSRichard Lowepushq %rdx 219*702941cdSRichard Lowepushq %rcx 220*702941cdSRichard Lowesubq $0x20,%rsp 221*702941cdSRichard LoweSET_SIZE(gcc_push_small_struct_ret, gcc_push_small_struct_ret_end) 222*702941cdSRichard Lowe 223*702941cdSRichard LoweFUNC(gcc_push_small_struct_ret_and_spill) 224*702941cdSRichard Lowepushq %rbp 225*702941cdSRichard Lowemovq %rsp,%rbp 226*702941cdSRichard Lowepushq %rdi 227*702941cdSRichard Lowepushq %rsi 228*702941cdSRichard Lowepushq %rdx 229*702941cdSRichard Lowepushq %rcx 230*702941cdSRichard Lowepushq %r8 231*702941cdSRichard Lowepushq %r9 232*702941cdSRichard Lowesubq $0x50,%rsp 233*702941cdSRichard LoweSET_SIZE(gcc_push_small_struct_ret_and_spill, gcc_push_small_struct_ret_and_spill_end) 234*702941cdSRichard Lowe 235*702941cdSRichard LoweFUNC(gcc_push_stack_spill) 236*702941cdSRichard Lowepushq %rbp 237*702941cdSRichard Lowemovq %rsp,%rbp 238*702941cdSRichard Lowepushq %rdi 239*702941cdSRichard Lowepushq %rsi 240*702941cdSRichard Lowepushq %rdx 241*702941cdSRichard Lowepushq %rcx 242*702941cdSRichard Lowepushq %r8 243*702941cdSRichard Lowepushq %r9 244*702941cdSRichard Lowesubq $0x50,%rsp 245*702941cdSRichard LoweSET_SIZE(gcc_push_stack_spill, gcc_push_stack_spill_end) 246*702941cdSRichard Lowe 247*702941cdSRichard LoweFUNC(ss_mov_align) 248*702941cdSRichard Lowepushq %rbp 249*702941cdSRichard Lowemovq %rsp,%rbp 250*702941cdSRichard Lowesubq $0x30,%rsp 251*702941cdSRichard Lowemovq %rdi,-0x8(%rbp) 252*702941cdSRichard Lowemovq %rsi,-0x10(%rbp) 253*702941cdSRichard Lowemovq %rdx,-0x18(%rbp) 254*702941cdSRichard Lowemovq %rcx,-0x20(%rbp) 255*702941cdSRichard Lowemovq %r8,-0x28(%rbp) 256*702941cdSRichard LoweSET_SIZE(ss_mov_align, ss_mov_align_end) 257*702941cdSRichard Lowe 258*702941cdSRichard LoweFUNC(ss_mov_basic) 259*702941cdSRichard Lowepushq %rbp 260*702941cdSRichard Lowemovq %rsp,%rbp 261*702941cdSRichard Lowesubq $0x20,%rsp 262*702941cdSRichard Lowemovq %rdi,-0x8(%rbp) 263*702941cdSRichard Lowemovq %rsi,-0x10(%rbp) 264*702941cdSRichard Lowemovq %rdx,-0x18(%rbp) 265*702941cdSRichard Lowemovq %rcx,-0x20(%rbp) 266*702941cdSRichard LoweSET_SIZE(ss_mov_basic, ss_mov_basic_end) 267*702941cdSRichard Lowe 268*702941cdSRichard LoweFUNC(ss_mov_big_struct_ret) 269*702941cdSRichard Lowepushq %rbp 270*702941cdSRichard Lowemovq %rsp,%rbp 271*702941cdSRichard Lowesubq $0x30,%rsp 272*702941cdSRichard Lowemovq %rdi,-0x8(%rbp) 273*702941cdSRichard Lowemovq %rsi,-0x10(%rbp) 274*702941cdSRichard Lowemovq %rdx,-0x18(%rbp) 275*702941cdSRichard Lowemovq %rcx,-0x20(%rbp) 276*702941cdSRichard Lowemovq %r8,-0x28(%rbp) 277*702941cdSRichard LoweSET_SIZE(ss_mov_big_struct_ret, ss_mov_big_struct_ret_end) 278*702941cdSRichard Lowe 279*702941cdSRichard LoweFUNC(ss_mov_big_struct_ret_and_spill) 280*702941cdSRichard Lowepushq %rbp 281*702941cdSRichard Lowemovq %rsp,%rbp 282*702941cdSRichard Lowesubq $0x50,%rsp 283*702941cdSRichard Lowemovq %rdi,-0x8(%rbp) 284*702941cdSRichard Lowemovq %rsi,-0x10(%rbp) 285*702941cdSRichard Lowemovq %rdx,-0x18(%rbp) 286*702941cdSRichard Lowemovq %rcx,-0x20(%rbp) 287*702941cdSRichard Lowemovq %r8,-0x28(%rbp) 288*702941cdSRichard Lowemovq %r9,-0x30(%rbp) 289*702941cdSRichard LoweSET_SIZE(ss_mov_big_struct_ret_and_spill, ss_mov_big_struct_ret_and_spill_end) 290*702941cdSRichard Lowe 291*702941cdSRichard LoweFUNC(ss_mov_small_struct_ret) 292*702941cdSRichard Lowepushq %rbp 293*702941cdSRichard Lowemovq %rsp,%rbp 294*702941cdSRichard Lowesubq $0x20,%rsp 295*702941cdSRichard Lowemovq %rdi,-0x8(%rbp) 296*702941cdSRichard Lowemovq %rsi,-0x10(%rbp) 297*702941cdSRichard Lowemovq %rdx,-0x18(%rbp) 298*702941cdSRichard Lowemovq %rcx,-0x20(%rbp) 299*702941cdSRichard LoweSET_SIZE(ss_mov_small_struct_ret, ss_mov_small_struct_ret_end) 300*702941cdSRichard Lowe 301*702941cdSRichard LoweFUNC(ss_mov_small_struct_ret_and_spill) 302*702941cdSRichard Lowepushq %rbp 303*702941cdSRichard Lowemovq %rsp,%rbp 304*702941cdSRichard Lowesubq $0x50,%rsp 305*702941cdSRichard Lowemovq %rdi,-0x8(%rbp) 306*702941cdSRichard Lowemovq %rsi,-0x10(%rbp) 307*702941cdSRichard Lowemovq %rdx,-0x18(%rbp) 308*702941cdSRichard Lowemovq %rcx,-0x20(%rbp) 309*702941cdSRichard Lowemovq %r8,-0x28(%rbp) 310*702941cdSRichard Lowemovq %r9,-0x30(%rbp) 311*702941cdSRichard LoweSET_SIZE(ss_mov_small_struct_ret_and_spill, ss_mov_small_struct_ret_and_spill_end) 312*702941cdSRichard Lowe 313*702941cdSRichard LoweFUNC(ss_mov_stack_spill) 314*702941cdSRichard Lowepushq %rbp 315*702941cdSRichard Lowemovq %rsp,%rbp 316*702941cdSRichard Lowesubq $0x50,%rsp 317*702941cdSRichard Lowemovq %rdi,-0x8(%rbp) 318*702941cdSRichard Lowemovq %rsi,-0x10(%rbp) 319*702941cdSRichard Lowemovq %rdx,-0x18(%rbp) 320*702941cdSRichard Lowemovq %rcx,-0x20(%rbp) 321*702941cdSRichard Lowemovq %r8,-0x28(%rbp) 322*702941cdSRichard Lowemovq %r9,-0x30(%rbp) 323*702941cdSRichard LoweSET_SIZE(ss_mov_stack_spill, ss_mov_stack_spill_end) 324*702941cdSRichard Lowe 325*702941cdSRichard Lowe/* DTrace instrumentation */ 326*702941cdSRichard LoweFUNC(dtrace_instrumented) 327*702941cdSRichard Loweint $0x3 328*702941cdSRichard Lowemovq %rsp, %rbp 329*702941cdSRichard Lowemovq %rbx,-0x28(%rbp) 330*702941cdSRichard Lowemovq %rcx,-0x20(%rbp) 331*702941cdSRichard Lowemovq %rdx,-0x18(%rbp) 332*702941cdSRichard Lowemovq %rsi,-0x10(%rbp) 333*702941cdSRichard Lowemovq %rdi,-0x8(%rbp) 334*702941cdSRichard Lowesubq $0x50,%rsp 335*702941cdSRichard LoweSET_SIZE(dtrace_instrumented, dtrace_instrumented_end) 336*702941cdSRichard Lowe 337*702941cdSRichard Lowe/* 338*702941cdSRichard Lowe * System functions with special characteristics, be they non-initial FP save, 339*702941cdSRichard Lowe * gaps between FP save and argument saving, or gaps between saved arguments. 340*702941cdSRichard Lowe */ 341*702941cdSRichard LoweFUNC(kmem_alloc) 342*702941cdSRichard Loweleaq -0x1(%rdi),%rax 343*702941cdSRichard Lowepushq %rbp 344*702941cdSRichard Lowemovq %rax,%rdx 345*702941cdSRichard Lowemovq %rsp,%rbp 346*702941cdSRichard Lowesubq $0x30,%rsp 347*702941cdSRichard Loweshrq $0x3,%rdx 348*702941cdSRichard Lowemovq %r12,-0x28(%rbp) 349*702941cdSRichard Lowemovq %rbx,-0x30(%rbp) 350*702941cdSRichard Lowecmpq $0x1ff,%rdx 351*702941cdSRichard Lowemovq %r13,-0x20(%rbp) 352*702941cdSRichard Lowemovq %r14,-0x18(%rbp) 353*702941cdSRichard Lowemovq %rsi,-0x10(%rbp) 354*702941cdSRichard Lowemovq %rdi,-0x8(%rbp) 355*702941cdSRichard Lowemovq %rdi,%r12 356*702941cdSRichard LoweSET_SIZE(kmem_alloc, kmem_alloc_end) 357*702941cdSRichard Lowe 358*702941cdSRichard LoweFUNC(uts_kill) 359*702941cdSRichard Lowepushq %rbp 360*702941cdSRichard Lowemovq %rsp,%rbp 361*702941cdSRichard Lowesubq $0x50,%rsp 362*702941cdSRichard Lowemovq %rbx,-0x28(%rbp) 363*702941cdSRichard Loweleaq -0x50(%rbp),%rbx 364*702941cdSRichard Lowemovq %r12,-0x20(%rbp) 365*702941cdSRichard Lowemovq %r13,-0x18(%rbp) 366*702941cdSRichard Lowemovq %rsi,-0x10(%rbp) 367*702941cdSRichard Lowemovl %edi,%r12d 368*702941cdSRichard Lowemovq %rdi,-0x8(%rbp) 369*702941cdSRichard LoweSET_SIZE(uts_kill, uts_kill_end) 370*702941cdSRichard Lowe 371*702941cdSRichard LoweFUNC(av1394_ic_bitreverse) 372*702941cdSRichard Lowemovq %rdi,%rdx 373*702941cdSRichard Lowemovq $0x5555555555555555,%rax 374*702941cdSRichard Lowemovq $0x3333333333333333,%rcx 375*702941cdSRichard Loweshrq $0x1,%rdx 376*702941cdSRichard Lowepushq %rbp 377*702941cdSRichard Loweandq %rax,%rdx 378*702941cdSRichard Loweandq %rdi,%rax 379*702941cdSRichard Loweaddq %rax,%rax 380*702941cdSRichard Lowemovq %rsp,%rbp 381*702941cdSRichard Lowesubq $0x10,%rsp 382*702941cdSRichard Loweorq %rdx,%rax 383*702941cdSRichard Lowemovq %rdi,-0x8(%rbp) 384*702941cdSRichard LoweSET_SIZE(av1394_ic_bitreverse, av1394_ic_bitreverse_end) 385*702941cdSRichard Lowe 386*702941cdSRichard Lowe/* Problematic functions which should not match */ 387*702941cdSRichard Lowe 388*702941cdSRichard LoweFUNC(no_fp) /* No frame pointer */ 389*702941cdSRichard Lowemovq %rdi, %rsi 390*702941cdSRichard Lowemovq %rsi, %rdi 391*702941cdSRichard Lowemovq %rbx,-0x28(%rbp) 392*702941cdSRichard Lowemovq %rcx,-0x20(%rbp) 393*702941cdSRichard Lowemovq %rdx,-0x18(%rbp) 394*702941cdSRichard Lowemovq %rsi,-0x10(%rbp) 395*702941cdSRichard Lowemovq %rdi,-0x8(%rbp) 396*702941cdSRichard Lowesubq $0x50,%rsp 397*702941cdSRichard LoweSET_SIZE(no_fp, no_fp_end) 398*702941cdSRichard Lowe 399*702941cdSRichard Lowe/* Small structure return, but with an SSE type (thus forcing it to the stack) */ 400*702941cdSRichard LoweFUNC(small_struct_ret_w_float) 401*702941cdSRichard Lowepushq %rbp 402*702941cdSRichard Lowemovq %rsp,%rbp 403*702941cdSRichard Lowemovq %rdi,-0x8(%rbp) 404*702941cdSRichard Lowesubq $0x30,%rsp 405*702941cdSRichard LoweSET_SIZE(small_struct_ret_w_float, small_struct_ret_w_float_end) 406*702941cdSRichard Lowe 407*702941cdSRichard Lowe/* Big structure return, but with an SSE type */ 408*702941cdSRichard LoweFUNC(big_struct_ret_w_float) 409*702941cdSRichard Lowepushq %rbp 410*702941cdSRichard Lowemovq %rsp,%rbp 411*702941cdSRichard Lowemovq %rsi,-0x8(%rbp) 412*702941cdSRichard Lowesubq $0x50,%rsp 413*702941cdSRichard Lowemovq %rsi,-0x48(%rbp) 414*702941cdSRichard Lowemovq -0x48(%rbp),%rax 415*702941cdSRichard Lowemovq %rax,%rsi 416*702941cdSRichard Lowemovl $0x400f60,%edi 417*702941cdSRichard Lowemovl $0x0,%eax 418*702941cdSRichard Lowemovl $0x1770,%edi 419*702941cdSRichard Lowemovl $0x0,%eax 420*702941cdSRichard Loweleave 421*702941cdSRichard Loweret 422*702941cdSRichard LoweSET_SIZE(big_struct_ret_w_float, big_struct_ret_w_float_end) 423*702941cdSRichard Lowe 424*702941cdSRichard LoweFUNC(big_struct_arg_by_value) 425*702941cdSRichard Lowepushq %rbp 426*702941cdSRichard Lowemovq %rsp,%rbp 427*702941cdSRichard Lowemovq %rdi,-0x8(%rbp) 428*702941cdSRichard Lowesubq $0x40,%rsp 429*702941cdSRichard LoweSET_SIZE(big_struct_arg_by_value, big_struct_arg_by_value_end) 430*702941cdSRichard Lowe 431*702941cdSRichard LoweFUNC(small_struct_arg_by_value) 432*702941cdSRichard Lowepushq %rbp 433*702941cdSRichard Lowemovq %rsp,%rbp 434*702941cdSRichard Lowemovq %rdx,-0x18(%rbp) 435*702941cdSRichard Lowemovq %rsi,-0x10(%rbp) 436*702941cdSRichard Lowemovq %rdi,-0x8(%rbp) 437*702941cdSRichard Lowesubq $0x50,%rsp 438*702941cdSRichard LoweSET_SIZE(small_struct_arg_by_value, small_struct_arg_by_value_end) 439*702941cdSRichard Lowe 440*702941cdSRichard LoweFUNC(interleaved_argument_saves) 441*702941cdSRichard Lowepushq %rbp 442*702941cdSRichard Lowemovq %rdi,%rax 443*702941cdSRichard Loweshlq $0x21,%rax 444*702941cdSRichard Lowemovq %rsp,%rbp 445*702941cdSRichard Loweshrq $0x29,%rax 446*702941cdSRichard Lowesubq $0x30,%rsp 447*702941cdSRichard Lowemovq %rdi,-0x8(%rbp) 448*702941cdSRichard Lowemovq %rbx,-0x28(%rbp) 449*702941cdSRichard Lowemovzbl %dil,%edi 450*702941cdSRichard Lowemovq %rcx,-0x20(%rbp) 451*702941cdSRichard Lowemovq %rdx,-0x18(%rbp) 452*702941cdSRichard Lowemovq %rsi,-0x10(%rbp) 453*702941cdSRichard Lowemovq 0x0(,%rax,8),%rax 454*702941cdSRichard LoweSET_SIZE(interleaved_argument_saves, interleaved_argument_saves_end) 455*702941cdSRichard Lowe 456*702941cdSRichard LoweFUNC(jmp_table) 457*702941cdSRichard Lowepushq %rbp 458*702941cdSRichard Lowemovq %rsp,%rbp 459*702941cdSRichard Lowe.word 0x9afe 460*702941cdSRichard Lowe.word 0xffff 461*702941cdSRichard Lowe.word 0xffff 462*702941cdSRichard Lowe.word 0xa8ff 463*702941cdSRichard Lowe.word 0xffff 464*702941cdSRichard Lowe.word 0xffff 465*702941cdSRichard Lowe.word 0x7cff 466*702941cdSRichard Lowe.word 0xffff 467*702941cdSRichard Lowe.word 0xffff 468*702941cdSRichard LoweSET_SIZE(jmp_table, jmp_table_end) 469