master
c 35 lines 494 Bytes
Raw
1 /*
2 * Test the TEST AND SET instruction.
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
6 #include <assert.h>
7 #include <stdlib.h>
8
9 static int ts(char *p)
10 {
11 int cc;
12
13 asm("ts %[p]\n"
14 "ipm %[cc]"
15 : [cc] "=r" (cc)
16 , [p] "+Q" (*p)
17 : : "cc");
18
19 return (cc >> 28) & 3;
20 }
21
22 int main(void)
23 {
24 char c;
25
26 c = 0x80;
27 assert(ts(&c) == 1);
28 assert(c == 0xff);
29
30 c = 0x7f;
31 assert(ts(&c) == 0);
32 assert(c == 0xff);
33
34 return EXIT_SUCCESS;
35 }