annotate dyncall/dyncall_call_mips_eabi_gas.s @ 356:2f64957d6a46

- fix to dynload to build with musl libc (latter has dlinfo but not RTLD_SELF, so fallback to dl_iterate_phdr if on ELF targets)
author Tassilo Philipp
date Tue, 25 Feb 2020 16:07:45 +0100
parents 9aa75a74614c
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
1 /*
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
2
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
3 Package: dyncall
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
4 Library: dyncall
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
5 File: dyncall/dyncall_call_mips_eabi_gas.s
94
ea17e6e6bd3a - stubs for mips callback support
cslag
parents: 0
diff changeset
6 Description: mips "eabi" abi call kernel implementation in GNU Assembler
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
7 License:
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
8
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
9 Copyright (c) 2007-2011 Daniel Adler <dadler@uni-goettingen.de>,
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
10 Tassilo Philipp <tphilipp@potion-studios.com>
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
11
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
12 Permission to use, copy, modify, and distribute this software for any
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
13 purpose with or without fee is hereby granted, provided that the above
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
14 copyright notice and this permission notice appear in all copies.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
15
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
16 THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
17 WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
18 MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
19 ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
20 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
21 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
22 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
23
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
24 */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
25
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
26
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
27 /*//////////////////////////////////////////////////////////////////////
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
28
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
29 dyncall_call_mips_eabi_gas.s
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
30
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
31 MIPS 32bit family of processors.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
32 2008-01-03
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
33
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
34 //////////////////////////////////////////////////////////////////////*/
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
35 .text
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
36 .globl dcCall_mips_eabi
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
37
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
38 dcCall_mips_eabi:
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
39 /* $4 target function */
110
9aa75a74614c - working mips32 eabi callbacks
cslag
parents: 109
diff changeset
40 /* $5 register data */
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
41 /* $6 stack size */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
42 /* $7 stack data */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
43 addiu $sp,$sp,-16
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
44 sw $16,8($sp)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
45 sw $31,4($sp)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
46 sw $fp,0($sp)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
47
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
48 move $fp,$sp
110
9aa75a74614c - working mips32 eabi callbacks
cslag
parents: 109
diff changeset
49
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
50 move $2, $0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
51 add $2, 8
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
52 neg $2
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
53 and $sp, $2
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
54 add $6, 7
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
55 and $6, $2
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
56
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
57 move $12,$4 /* target function */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
58 move $13,$5 /* register data */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
59 move $16,$6 /* stack size */
110
9aa75a74614c - working mips32 eabi callbacks
cslag
parents: 109
diff changeset
60
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
61 sub $sp,$sp,$16 /* allocate stack frame */
110
9aa75a74614c - working mips32 eabi callbacks
cslag
parents: 109
diff changeset
62
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
63 /* copy stack data */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
64
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
65 .next:
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
66 beq $6,$0, .skip
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
67 nop
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
68 addiu $6,$6, -4
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
69
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
70 lw $2, 0($7)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
71 sw $2, 0($sp)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
72 addiu $7,$7, 4
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
73 addiu $sp,$sp, 4
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
74 j .next
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
75 nop
110
9aa75a74614c - working mips32 eabi callbacks
cslag
parents: 109
diff changeset
76
9aa75a74614c - working mips32 eabi callbacks
cslag
parents: 109
diff changeset
77 .skip:
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
78
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
79 sub $sp,$sp,$16
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
80
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
81 /* load integer parameter registers */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
82
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
83 lw $4 , 0($13)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
84 lw $5 , 4($13)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
85 lw $6 , 8($13)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
86 lw $7 ,12($13)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
87 lw $8 ,16($13)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
88 lw $9 ,20($13)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
89 lw $10,24($13)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
90 lw $11,28($13)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
91
109
9e677d4c0b6b - mips comment cleanups
cslag
parents: 94
diff changeset
92 /* load single-precision floating pointer parameter registers */
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
93
110
9aa75a74614c - working mips32 eabi callbacks
cslag
parents: 109
diff changeset
94 l.s $f12, 32($13)
9aa75a74614c - working mips32 eabi callbacks
cslag
parents: 109
diff changeset
95 l.s $f13, 36($13)
9aa75a74614c - working mips32 eabi callbacks
cslag
parents: 109
diff changeset
96 l.s $f14, 40($13)
9aa75a74614c - working mips32 eabi callbacks
cslag
parents: 109
diff changeset
97 l.s $f15, 44($13)
9aa75a74614c - working mips32 eabi callbacks
cslag
parents: 109
diff changeset
98 l.s $f16, 48($13)
9aa75a74614c - working mips32 eabi callbacks
cslag
parents: 109
diff changeset
99 l.s $f17, 52($13)
9aa75a74614c - working mips32 eabi callbacks
cslag
parents: 109
diff changeset
100 l.s $f18, 56($13)
9aa75a74614c - working mips32 eabi callbacks
cslag
parents: 109
diff changeset
101 l.s $f19, 60($13)
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
102
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
103 jal $12
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
104 nop
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
105
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
106 /* add $sp,$sp,$16 */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
107 move $sp,$fp
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
108
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
109 lw $16,8($sp)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
110 lw $31,4($sp)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
111 lw $fp,0($sp)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
112 addiu $sp,$sp,16
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
113 j $31
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
114 nop
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
115