~mcf/drawterm

ref: d28c5f37cfbd0507796d76ced17ad01fd11ea564 drawterm/posix-riscv64/tas.c -rw-r--r-- 334 bytes
d28c5f37 add preliminary riscv64 support from archlinux (thanks Sören Tempel) 6 months ago
                                                                                
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
#include "u.h"
#include "libc.h"

int
tas(int *x)
{
	int v, i = 1;

	__asm__(
		"1:	lr.w t0, (%1)\n"
		"	sc.w t1, %2, (%1)\n"
		"	bnez t1, 1b\n"
		"       mv %0, t0"
		: "=r" (v)
		: "r" (x), "r" (i)
		: "t1", "t0"
	);

	switch(v) {
	case 0:
	case 1:
		return v;
	default:
		print("canlock: corrupted 0x%lux\n", v);
		return 1;
	}
}