6
/* Apparently the "b" register constraint is like "r" except that it
7
disallows the use of r0, which means it is safe to use in places
8
where the appearance of r0 would cause a problem due to it being
11
static void announce ( char* str )
13
printf("------ %s ------\n", str);
19
char* a1 = malloc(100);
20
char* a2 = malloc(100);
21
strcpy(a1,"here is a stringHERE IS A STRING");
23
announce("lswi n == 8 (fe special cased)");
24
asm volatile("li 5,0\n\t"
29
: : "b"(a1), "b"(a2) : "r3", "r4", "r5",
32
for (i = 0; i < 12; i++)
33
printf("%d = 0x%2x\n", i, a2[i]);
37
announce("lswi n /= 8");
38
asm volatile("lswi 3,%0, 9\n\t"
42
: : "b"(a1), "b"(a2) : "r3", "r4", "r5",
45
for (i = 0; i < 12; i++)
46
printf("%d = 0x%2x\n", i, a2[i]);
53
asm volatile("li 8, 11\n\t"
59
: : "b"(a1), "b"(a2), "b"(16) : "r3", "r4", "r5", "r8",
62
for (i = 0; i < 12; i++)
63
printf("%d = 0x%2x\n", i, a2[i]);
67
announce("stswi n == 8 (fe special cased)");
70
asm volatile("lswi 3,%0, 19\n\t"
72
: : "b"(a1), "b"(a2) : "r3","r4","r5","r6","r7",
78
announce("stswi n /= 8");
81
asm volatile("lswi 3,%0, 19\n\t"
83
: : "b"(a1), "b"(a2) : "r3","r4","r5","r6","r7",
92
asm volatile("li 8, 11\n\t"
96
: : "b"(a1), "b"(a2), "b"(16) : "r3", "r4", "r5", "r8",
98
printf("%s\n", a2+16);