]> rtime.felk.cvut.cz Git - l4.git/blob - l4/pkg/valgrind/src/valgrind-3.6.0-svn/none/tests/ppc32/lsw.c
update
[l4.git] / l4 / pkg / valgrind / src / valgrind-3.6.0-svn / none / tests / ppc32 / lsw.c
1
2 #include <stdio.h>
3 #include <stdlib.h>
4 #include <string.h>
5
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
9    read as zero. */
10
11 static void announce ( char* str )
12 {
13    printf("------ %s ------\n", str);
14 }
15
16 int main ( void )
17 {
18   int i;
19   char* a1 = malloc(100);
20   char* a2 = malloc(100);
21   strcpy(a1,"here is a stringHERE IS A STRING");
22
23   announce("lswi n == 8 (fe special cased)");
24   asm volatile("li 5,0\n\t"
25                "lswi 3,%0, 8\n\t" 
26                "stw 3,0(%1)\n\t"
27                "stw 4,4(%1)\n\t"
28                "stw 5,8(%1)\n\t"
29                : : "b"(a1), "b"(a2) : "r3", "r4", "r5", 
30                                       "cc", "memory" );
31   printf("%s\n", a2);
32   for (i = 0; i < 12; i++)
33     printf("%d = 0x%2x\n", i, a2[i]);
34   printf("\n");
35
36
37   announce("lswi n /= 8");
38   asm volatile("lswi 3,%0, 9\n\t" 
39                "stw 3,0(%1)\n\t"
40                "stw 4,4(%1)\n\t"
41                "stw 5,8(%1)\n\t"
42                : : "b"(a1), "b"(a2) : "r3", "r4", "r5", 
43                                       "cc", "memory" );
44   printf("%s\n", a2);
45   for (i = 0; i < 12; i++)
46     printf("%d = 0x%2x\n", i, a2[i]);
47   printf("\n");
48
49
50   announce("lswx");
51   free(a2);
52   a2 = malloc(100);
53   asm volatile("li  8, 11\n\t"
54                "mtxer 8\n\t"
55                "lswx 3,%0,%2\n\t" 
56                "stw 3,0(%1)\n\t"
57                "stw 4,4(%1)\n\t"
58                "stw 5,8(%1)\n\t"
59                : : "b"(a1), "b"(a2), "b"(16) : "r3", "r4", "r5", "r8", 
60                                                "cc", "memory" );
61   printf("%s\n", a2);
62   for (i = 0; i < 12; i++)
63      printf("%d = 0x%2x\n", i, a2[i]);
64   printf("\n");
65
66
67   announce("stswi n == 8 (fe special cased)");
68   free(a2);
69   a2 = calloc(100,1);
70   asm volatile("lswi 3,%0, 19\n\t"
71                "stswi 3,%1, 8\n"
72                : : "b"(a1), "b"(a2) : "r3","r4","r5","r6","r7",
73                                       "cc", "memory" );
74   printf("%s\n", a2);
75   printf("\n");
76
77
78   announce("stswi n /= 8");
79   free(a2);
80   a2 = calloc(100,1);
81   asm volatile("lswi 3,%0, 19\n\t"
82                "stswi 3,%1, 17\n"
83                : : "b"(a1), "b"(a2) : "r3","r4","r5","r6","r7",
84                                       "cc", "memory" );
85   printf("%s\n", a2);
86   printf("\n");
87
88
89   announce("stswx");
90   free(a2);
91   a2 = calloc(100,1);
92   asm volatile("li  8, 11\n\t"
93                "mtxer 8\n\t"
94                "lswx  3,%0,%2\n\t" 
95                "stswx 3,%1,%2\n\t" 
96                : : "b"(a1), "b"(a2), "b"(16) : "r3", "r4", "r5", "r8", 
97                                                "cc", "memory" );
98   printf("%s\n", a2+16);
99   printf("\n");
100
101   return 0;
102 }