summaryrefslogtreecommitdiffstats
path: root/mdk-stage1/dietlibc/alpha/unified.S
blob: 02a1c9bcd3a7d9b2a93fd83e7a760d9cc9c5756f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <dietfeatures.h>

.global __unified_syscall
__unified_syscall:
	callsys
	bne	$19, .Lerror
	ret	$31, ($26), 0x01

.Lerror:
.global error_unified_syscall
error_unified_syscall:
#ifdef WANT_THREAD_SAVE
	lda	$sp, -16($sp)	/* alloc 2 qwords on stack */
	stq	$26, 0($sp)	/* save ra to stack */
	stq	$0,  8($sp)	/* save v0 to stack */

	jsr	$26, __errno_location	/* call __errno_location */

	ldq	$1,  8($sp)	/* write old v0 to errno */
	stl	$1,  0($0)

	lda	$0,  -1($31)	/* new return value is -1 */
	ldq	$26, 0($sp)	/* restore return address */
	lda	$sp, 16($sp)	/* free 2 qwords on stack */
#else
	lda	$1,  errno
	stl	$0,  0($1)
#endif
	ret	$31, ($26), 0x01  /* return */