1/* 2Not only MIPS has 20 different ABIs... nobody tells anybody what specific variant of which ABI is 3used where. 4 5This is an "EABI" implementation based on the following page: 6 7http://www.cygwin.com/ml/binutils/2003-06/msg00436.html 8*/ 9 10#include "psm.h" 11 12.set noreorder /* we’ll manage the delay slots on our own, thanks! */ 13 14.text 15.globl rust_psm_stack_direction 16.p2align 3 17.type rust_psm_stack_direction,@function 18.ent rust_psm_stack_direction 19/* extern "C" fn() -> u8 */ 20rust_psm_stack_direction: 21.cfi_startproc 22 jr $31 23 addiu $2, $zero, STACK_DIRECTION_DESCENDING 24.end rust_psm_stack_direction 25.rust_psm_stack_direction_end: 26.size rust_psm_stack_direction,.rust_psm_stack_direction_end-rust_psm_stack_direction 27.cfi_endproc 28 29 30.globl rust_psm_stack_pointer 31.p2align 3 32.type rust_psm_stack_pointer,@function 33.ent rust_psm_stack_pointer 34/* extern "C" fn() -> *mut u8 */ 35rust_psm_stack_pointer: 36.cfi_startproc 37 jr $31 38 move $2, $29 39.end rust_psm_stack_pointer 40.rust_psm_stack_pointer_end: 41.size rust_psm_stack_pointer,.rust_psm_stack_pointer_end-rust_psm_stack_pointer 42.cfi_endproc 43 44 45 46.globl rust_psm_replace_stack 47.p2align 3 48.type rust_psm_replace_stack,@function 49.ent rust_psm_replace_stack 50/* extern "C" fn(r4: usize, r5: extern "C" fn(usize), r6: *mut u8) */ 51rust_psm_replace_stack: 52.cfi_startproc 53 move $25, $5 54 jr $5 55 move $29, $6 56.end rust_psm_replace_stack 57.rust_psm_replace_stack_end: 58.size rust_psm_replace_stack,.rust_psm_on_stack_end-rust_psm_on_stack 59.cfi_endproc 60 61 62.globl rust_psm_on_stack 63.p2align 3 64.type rust_psm_on_stack,@function 65.ent rust_psm_on_stack 66/* extern "C" fn(r4: usize, r5: usize, r6: extern "C" fn(usize), r7: *mut u8) */ 67rust_psm_on_stack: 68.cfi_startproc 69 sd $29, -8($7) 70 sd $31, -16($7) 71 .cfi_def_cfa 7, 0 72 .cfi_offset 31, -16 73 .cfi_offset 29, -8 74 move $25, $6 75 jalr $31, $6 76 daddiu $29, $7, -16 77 .cfi_def_cfa 29, 16 78 ld $31, 0($29) 79 .cfi_restore 31 80 ld $29, 8($29) 81 .cfi_restore 29 82 jr $31 83 nop 84.end rust_psm_on_stack 85.rust_psm_on_stack_end: 86.size rust_psm_on_stack,.rust_psm_on_stack_end-rust_psm_on_stack 87.cfi_endproc 88