Viewing file: picdtr.c (3.59 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
/* { dg-options "-fPIE -mpic-data-text-rel -save-temps" } */ /* { dg-do run } */
#define TEST_VAR(var,val) (var) = (val); if( (var) != (val)) return 0;
int foo(unsigned int i); extern void abort(void); extern void exit(int);
unsigned char data[8]; long bigData[7]; long var; typedef struct {int a; short b; long c[1000][1000]; long long d[3][3]; char e; } myDef; myDef def; const char* myString;
/* { dg-final { scan-assembler "mfs\tr20,rpc" } } */ /* { dg-final { scan-assembler "addik\tr20,r20,8@TXTPCREL" } } */ /* { dg-final { scan-assembler ",r20,\[^\n]*var\[^\n]*@TXTREL" } } */ /* { dg-final { scan-assembler-not ",r0,\[^\n]*var" } } */ /* { dg-final { scan-assembler ",r20,\[^\n]*bigData\[^\n]*@TXTREL" } } */ /* { dg-final { scan-assembler-not ",r0,\[^\n]*bigData" } } */ /* { dg-final { scan-assembler ",r20,\[^\n]*def\[^\n]*@TXTREL" } } */ /* { dg-final { scan-assembler-not ",r0,\[^\n]*def" } } */ /* { dg-final { scan-assembler ",r20,\[^\n]*data\[^\n]*@TXTREL" } } */ /* { dg-final { scan-assembler-not ",r0,\[^\n]*data" } } */ /* { dg-final { scan-assembler ",r20,\[^\n]*L\[^\n]*@TXTREL" } } */ /* { dg-final { scan-assembler-not ",r0,\[^\n]*L" } } */
void foo2() { var++; }
int foo (unsigned int i) {
TEST_VAR(var,123) TEST_VAR(data[i],77) TEST_VAR(data[2],88) TEST_VAR(def.a,897) TEST_VAR(bigData[i],78) TEST_VAR(bigData[2],777) TEST_VAR(def.b,12333); TEST_VAR(def.c[i][i],5); TEST_VAR(def.c[0][1],7); TEST_VAR(def.d[1][2],123); TEST_VAR(def.e,7); TEST_VAR(bigData[i+1],bigData[i*2]);
foo2();
myString = "Hello";
switch(i){
case 1: var += 2; break; case 2: var += 3; break; case 3: var += 5; break; case 4: var += 7; break; case 5: var += 8; break; default: var = 0;
}
return 1;
}
int main() {
int result = foo(3); if(result != 1 || var != 129) { abort(); }
exit(0);
}
/* { dg-options "-fPIE -mpic-data-is-text-relative -save-temps" } */ /* { dg-do run } */
#define TEST_VAR(var,val) (var) = (val); if( (var) != (val)) return 0;
int foo(unsigned int i); extern void abort(void); extern void exit(int);
unsigned char data[8]; long bigData[7]; long var; typedef struct {int a; short b; long c[1000][1000]; long long d[3][3]; char e; } myDef; myDef def; const char* myString;
/* { dg-final { scan-assembler "mfs\tr20,rpc" } } */ /* { dg-final { scan-assembler "addik\tr20,r20,8@TXTPCREL" } } */ /* { dg-final { scan-assembler ",r20,\[^\n]*var\[^\n]*@TXTREL" } } */ /* { dg-final { scan-assembler-not ",r0,\[^\n]*var" } } */ /* { dg-final { scan-assembler ",r20,\[^\n]*bigData\[^\n]*@TXTREL" } } */ /* { dg-final { scan-assembler-not ",r0,\[^\n]*bigData" } } */ /* { dg-final { scan-assembler ",r20,\[^\n]*def\[^\n]*@TXTREL" } } */ /* { dg-final { scan-assembler-not ",r0,\[^\n]*def" } } */ /* { dg-final { scan-assembler ",r20,\[^\n]*data\[^\n]*@TXTREL" } } */ /* { dg-final { scan-assembler-not ",r0,\[^\n]*data" } } */ /* { dg-final { scan-assembler ",r20,\[^\n]*L\[^\n]*@TXTREL" } } */ /* { dg-final { scan-assembler-not ",r0,\[^\n]*L" } } */
void foo2() { var++; }
int foo (unsigned int i) {
TEST_VAR(var,123) TEST_VAR(data[i],77) TEST_VAR(data[2],88) TEST_VAR(def.a,897) TEST_VAR(bigData[i],78) TEST_VAR(bigData[2],777) TEST_VAR(def.b,12333); TEST_VAR(def.c[i][i],5); TEST_VAR(def.c[0][1],7); TEST_VAR(def.d[1][2],123); TEST_VAR(def.e,7); TEST_VAR(bigData[i+1],bigData[i*2]);
foo2();
myString = "Hello";
switch(i){
case 1: var += 2; break; case 2: var += 3; break; case 3: var += 5; break; case 4: var += 7; break; case 5: var += 8; break; default: var = 0;
}
return 1;
}
int main() {
int result = foo(3); if(result != 1 || var != 129) { abort(); }
exit(0);
}
|