mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-18 23:41:16 +08:00
cdx-branch.c: Fix broken test.
2017-10-23 Sandra Loosemore <sandra@codesourcery.com> gcc/testsuite/ * gcc.target/nios2/cdx-branch.c: Fix broken test. * gcc.target/nios2/lo-addr-bypass.c: New. * gcc.target/nios2/lo-addr-char.c: New. * gcc.target/nios2/lo-addr-int.c: New. * gcc.target/nios2/lo-addr-pic.c: New. * gcc.target/nios2/lo-addr-short.c: New. * gcc.target/nios2/lo-addr-tls.c: New. * gcc.target/nios2/lo-addr-uchar.c: New. * gcc.target/nios2/lo-addr-ushort.c: New. * gcc.target/nios2/lo-addr-volatile.c: New. From-SVN: r254035
This commit is contained in:
parent
efd5897cdf
commit
57f6a200e3
@ -1,3 +1,16 @@
|
||||
2017-10-23 Sandra Loosemore <sandra@codesourcery.com>
|
||||
|
||||
* gcc.target/nios2/cdx-branch.c: Fix broken test.
|
||||
* gcc.target/nios2/lo-addr-bypass.c: New.
|
||||
* gcc.target/nios2/lo-addr-char.c: New.
|
||||
* gcc.target/nios2/lo-addr-int.c: New.
|
||||
* gcc.target/nios2/lo-addr-pic.c: New.
|
||||
* gcc.target/nios2/lo-addr-short.c: New.
|
||||
* gcc.target/nios2/lo-addr-tls.c: New.
|
||||
* gcc.target/nios2/lo-addr-uchar.c: New.
|
||||
* gcc.target/nios2/lo-addr-ushort.c: New.
|
||||
* gcc.target/nios2/lo-addr-volatile.c: New.
|
||||
|
||||
2017-10-23 Paolo Carlini <paolo.carlini@oracle.com>
|
||||
|
||||
PR c++/80449
|
||||
|
@ -23,7 +23,7 @@ extern int i (int);
|
||||
extern int j (int);
|
||||
extern int k (int);
|
||||
|
||||
int h (int a)
|
||||
int h (int a, int b)
|
||||
{
|
||||
int x;
|
||||
|
||||
@ -31,7 +31,7 @@ int h (int a)
|
||||
an unconditional branch from one branch of the "if" to
|
||||
the return statement. We compile this testcase with -Os to
|
||||
avoid insertion of a duplicate epilogue in place of the branch. */
|
||||
if (a == 1)
|
||||
if (a == b)
|
||||
x = i (37);
|
||||
else
|
||||
x = j (42);
|
||||
|
40
gcc/testsuite/gcc.target/nios2/lo-addr-bypass.c
Normal file
40
gcc/testsuite/gcc.target/nios2/lo-addr-bypass.c
Normal file
@ -0,0 +1,40 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -march=r2 -mbypass-cache" } */
|
||||
/* { dg-final { scan-assembler-times "addi\tr., r., %lo" 12 } } */
|
||||
/* { dg-final { scan-assembler-not "ldw\t" } } */
|
||||
/* { dg-final { scan-assembler-not "stw\t" } } */
|
||||
/* { dg-final { scan-assembler-not "ldwio\tr., %lo" } } */
|
||||
/* { dg-final { scan-assembler-not "stwio\tr., %lo" } } */
|
||||
|
||||
/* Check that we do not generate %lo addresses with R2 ldstio instructions.
|
||||
%lo requires a 16-bit relocation and on R2 these instructions only have a
|
||||
12-bit register offset. */
|
||||
#define TYPE int
|
||||
|
||||
struct ss
|
||||
{
|
||||
TYPE x1,x2;
|
||||
};
|
||||
|
||||
extern TYPE S1;
|
||||
extern TYPE S2[];
|
||||
|
||||
extern struct ss S3;
|
||||
extern struct ss S4[];
|
||||
|
||||
TYPE *addr1 (void) { return &S1; }
|
||||
TYPE get1 (void) { return S1; }
|
||||
void set1 (TYPE value) { S1 = value; }
|
||||
|
||||
TYPE *addr2 (int i) { return &(S2[i]); }
|
||||
TYPE get2 (int i) { return S2[i]; }
|
||||
void set2 (int i, TYPE value) { S2[i] = value; }
|
||||
|
||||
TYPE *addr3 (void) { return &(S3.x2); }
|
||||
TYPE get3 (void) { return S3.x2; }
|
||||
void set3 (TYPE value) { S3.x2 = value; }
|
||||
|
||||
TYPE *addr4 (int i) { return &(S4[i].x2); }
|
||||
TYPE get4 (int i) { return S4[i].x2; }
|
||||
void set4 (int i, TYPE value) { S4[i].x2 = value; }
|
||||
|
60
gcc/testsuite/gcc.target/nios2/lo-addr-char.c
Normal file
60
gcc/testsuite/gcc.target/nios2/lo-addr-char.c
Normal file
@ -0,0 +1,60 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2" } */
|
||||
/* { dg-final { scan-assembler-times "addi\tr., r., %lo" 4 } } */
|
||||
/* { dg-final { scan-assembler-times "ldbu\tr., %lo" 4 } } */
|
||||
/* { dg-final { scan-assembler-times "ldb\tr., %lo" 16 } } */
|
||||
/* { dg-final { scan-assembler-times "stb\tr., %lo" 4 } } */
|
||||
|
||||
/* Check that various address forms involving a symbolic constant
|
||||
with a possible constant offset and/or index register are optimized
|
||||
to generate a %lo relocation in the load/store instructions instead
|
||||
of a plain register indirect addressing mode. */
|
||||
/* Note: get* uses ldhu but ext* uses ldh since TYPE is signed. */
|
||||
|
||||
#define TYPE signed char
|
||||
|
||||
struct ss
|
||||
{
|
||||
TYPE x1,x2;
|
||||
};
|
||||
|
||||
extern TYPE S1;
|
||||
extern TYPE S2[];
|
||||
|
||||
extern struct ss S3;
|
||||
extern struct ss S4[];
|
||||
|
||||
TYPE *addr1 (void) { return &S1; }
|
||||
TYPE get1 (void) { return S1; }
|
||||
void set1 (TYPE value) { S1 = value; }
|
||||
|
||||
TYPE *addr2 (int i) { return &(S2[i]); }
|
||||
TYPE get2 (int i) { return S2[i]; }
|
||||
void set2 (int i, TYPE value) { S2[i] = value; }
|
||||
|
||||
TYPE *addr3 (void) { return &(S3.x2); }
|
||||
TYPE get3 (void) { return S3.x2; }
|
||||
void set3 (TYPE value) { S3.x2 = value; }
|
||||
|
||||
TYPE *addr4 (int i) { return &(S4[i].x2); }
|
||||
TYPE get4 (int i) { return S4[i].x2; }
|
||||
void set4 (int i, TYPE value) { S4[i].x2 = value; }
|
||||
|
||||
int extw1 (void) { return (int)(S1); }
|
||||
int extw2 (int i) { return (int)(S2[i]); }
|
||||
int extw3 (void) { return (int)(S3.x2); }
|
||||
int extw4 (int i) { return (int)(S4[i].x2); }
|
||||
unsigned int extwu1 (void) { return (unsigned int)(S1); }
|
||||
unsigned int extwu2 (int i) { return (unsigned int)(S2[i]); }
|
||||
unsigned int extwu3 (void) { return (unsigned int)(S3.x2); }
|
||||
unsigned int extwu4 (int i) { return (unsigned int)(S4[i].x2); }
|
||||
|
||||
short exth1 (void) { return (short)(S1); }
|
||||
short exth2 (int i) { return (short)(S2[i]); }
|
||||
short exth3 (void) { return (short)(S3.x2); }
|
||||
short exth4 (int i) { return (short)(S4[i].x2); }
|
||||
unsigned short exthu1 (void) { return (unsigned short)(S1); }
|
||||
unsigned short exthu2 (int i) { return (unsigned short)(S2[i]); }
|
||||
unsigned short exthu3 (void) { return (unsigned short)(S3.x2); }
|
||||
unsigned short exthu4 (int i) { return (unsigned short)(S4[i].x2); }
|
||||
|
40
gcc/testsuite/gcc.target/nios2/lo-addr-int.c
Normal file
40
gcc/testsuite/gcc.target/nios2/lo-addr-int.c
Normal file
@ -0,0 +1,40 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2" } */
|
||||
/* { dg-final { scan-assembler-times "addi\tr., r., %lo" 4 } } */
|
||||
/* { dg-final { scan-assembler-times "ldw\tr., %lo" 4 } } */
|
||||
/* { dg-final { scan-assembler-times "stw\tr., %lo" 4 } } */
|
||||
|
||||
/* Check that various address forms involving a symbolic constant
|
||||
with a possible constant offset and/or index register are optimized
|
||||
to generate a %lo relocation in the load/store instructions instead
|
||||
of a plain register indirect addressing mode. */
|
||||
|
||||
#define TYPE int
|
||||
|
||||
struct ss
|
||||
{
|
||||
TYPE x1,x2;
|
||||
};
|
||||
|
||||
extern TYPE S1;
|
||||
extern TYPE S2[];
|
||||
|
||||
extern struct ss S3;
|
||||
extern struct ss S4[];
|
||||
|
||||
TYPE *addr1 (void) { return &S1; }
|
||||
TYPE get1 (void) { return S1; }
|
||||
void set1 (TYPE value) { S1 = value; }
|
||||
|
||||
TYPE *addr2 (int i) { return &(S2[i]); }
|
||||
TYPE get2 (int i) { return S2[i]; }
|
||||
void set2 (int i, TYPE value) { S2[i] = value; }
|
||||
|
||||
TYPE *addr3 (void) { return &(S3.x2); }
|
||||
TYPE get3 (void) { return S3.x2; }
|
||||
void set3 (TYPE value) { S3.x2 = value; }
|
||||
|
||||
TYPE *addr4 (int i) { return &(S4[i].x2); }
|
||||
TYPE get4 (int i) { return S4[i].x2; }
|
||||
void set4 (int i, TYPE value) { S4[i].x2 = value; }
|
||||
|
38
gcc/testsuite/gcc.target/nios2/lo-addr-pic.c
Normal file
38
gcc/testsuite/gcc.target/nios2/lo-addr-pic.c
Normal file
@ -0,0 +1,38 @@
|
||||
/* { dg-do compile { target nios2-*-linux-gnu } } */
|
||||
/* { dg-options "-O2 -fpic" } */
|
||||
/* { dg-final { scan-assembler-not "ldw\tr., %lo" } } */
|
||||
/* { dg-final { scan-assembler-not "stw\tr., %lo" } } */
|
||||
|
||||
/* Check that address transformations for symbolic constants do NOT
|
||||
apply to code compiled with -fPIC, which requires references to
|
||||
go through the GOT pointer (r22) instead. */
|
||||
|
||||
#define TYPE int
|
||||
|
||||
struct ss
|
||||
{
|
||||
TYPE x1,x2;
|
||||
};
|
||||
|
||||
extern TYPE S1;
|
||||
extern TYPE S2[];
|
||||
|
||||
extern struct ss S3;
|
||||
extern struct ss S4[];
|
||||
|
||||
TYPE *addr1 (void) { return &S1; }
|
||||
TYPE get1 (void) { return S1; }
|
||||
void set1 (TYPE value) { S1 = value; }
|
||||
|
||||
TYPE *addr2 (int i) { return &(S2[i]); }
|
||||
TYPE get2 (int i) { return S2[i]; }
|
||||
void set2 (int i, TYPE value) { S2[i] = value; }
|
||||
|
||||
TYPE *addr3 (void) { return &(S3.x2); }
|
||||
TYPE get3 (void) { return S3.x2; }
|
||||
void set3 (TYPE value) { S3.x2 = value; }
|
||||
|
||||
TYPE *addr4 (int i) { return &(S4[i].x2); }
|
||||
TYPE get4 (int i) { return S4[i].x2; }
|
||||
void set4 (int i, TYPE value) { S4[i].x2 = value; }
|
||||
|
51
gcc/testsuite/gcc.target/nios2/lo-addr-short.c
Normal file
51
gcc/testsuite/gcc.target/nios2/lo-addr-short.c
Normal file
@ -0,0 +1,51 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2" } */
|
||||
/* { dg-final { scan-assembler-times "addi\tr., r., %lo" 4 } } */
|
||||
/* { dg-final { scan-assembler-times "ldhu\tr., %lo" 4 } } */
|
||||
/* { dg-final { scan-assembler-times "ldh\tr., %lo" 8 } } */
|
||||
/* { dg-final { scan-assembler-times "sth\tr., %lo" 4 } } */
|
||||
|
||||
/* Check that various address forms involving a symbolic constant
|
||||
with a possible constant offset and/or index register are optimized
|
||||
to generate a %lo relocation in the load/store instructions instead
|
||||
of a plain register indirect addressing mode. */
|
||||
/* Note: get* uses ldhu but ext* uses ldh since TYPE is signed. */
|
||||
|
||||
#define TYPE short
|
||||
|
||||
struct ss
|
||||
{
|
||||
TYPE x1,x2;
|
||||
};
|
||||
|
||||
extern TYPE S1;
|
||||
extern TYPE S2[];
|
||||
|
||||
extern struct ss S3;
|
||||
extern struct ss S4[];
|
||||
|
||||
TYPE *addr1 (void) { return &S1; }
|
||||
TYPE get1 (void) { return S1; }
|
||||
void set1 (TYPE value) { S1 = value; }
|
||||
|
||||
TYPE *addr2 (int i) { return &(S2[i]); }
|
||||
TYPE get2 (int i) { return S2[i]; }
|
||||
void set2 (int i, TYPE value) { S2[i] = value; }
|
||||
|
||||
TYPE *addr3 (void) { return &(S3.x2); }
|
||||
TYPE get3 (void) { return S3.x2; }
|
||||
void set3 (TYPE value) { S3.x2 = value; }
|
||||
|
||||
TYPE *addr4 (int i) { return &(S4[i].x2); }
|
||||
TYPE get4 (int i) { return S4[i].x2; }
|
||||
void set4 (int i, TYPE value) { S4[i].x2 = value; }
|
||||
|
||||
int extw1 (void) { return (int)(S1); }
|
||||
int extw2 (int i) { return (int)(S2[i]); }
|
||||
int extw3 (void) { return (int)(S3.x2); }
|
||||
int extw4 (int i) { return (int)(S4[i].x2); }
|
||||
unsigned int extwu1 (void) { return (unsigned int)(S1); }
|
||||
unsigned int extwu2 (int i) { return (unsigned int)(S2[i]); }
|
||||
unsigned int extwu3 (void) { return (unsigned int)(S3.x2); }
|
||||
unsigned int extwu4 (int i) { return (unsigned int)(S4[i].x2); }
|
||||
|
38
gcc/testsuite/gcc.target/nios2/lo-addr-tls.c
Normal file
38
gcc/testsuite/gcc.target/nios2/lo-addr-tls.c
Normal file
@ -0,0 +1,38 @@
|
||||
/* { dg-require-effective-target tls } */
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2" } */
|
||||
/* { dg-final { scan-assembler-not "ldw\tr., %lo" } } */
|
||||
/* { dg-final { scan-assembler-not "stw\tr., %lo" } } */
|
||||
|
||||
/* Check that address transformations for symbolic constants do NOT
|
||||
apply to TLS variables. */
|
||||
|
||||
#define TYPE int
|
||||
|
||||
struct ss
|
||||
{
|
||||
TYPE x1,x2;
|
||||
};
|
||||
|
||||
extern __thread TYPE S1;
|
||||
extern __thread TYPE S2[];
|
||||
|
||||
extern __thread struct ss S3;
|
||||
extern __thread struct ss S4[];
|
||||
|
||||
TYPE *addr1 (void) { return &S1; }
|
||||
TYPE get1 (void) { return S1; }
|
||||
void set1 (TYPE value) { S1 = value; }
|
||||
|
||||
TYPE *addr2 (int i) { return &(S2[i]); }
|
||||
TYPE get2 (int i) { return S2[i]; }
|
||||
void set2 (int i, TYPE value) { S2[i] = value; }
|
||||
|
||||
TYPE *addr3 (void) { return &(S3.x2); }
|
||||
TYPE get3 (void) { return S3.x2; }
|
||||
void set3 (TYPE value) { S3.x2 = value; }
|
||||
|
||||
TYPE *addr4 (int i) { return &(S4[i].x2); }
|
||||
TYPE get4 (int i) { return S4[i].x2; }
|
||||
void set4 (int i, TYPE value) { S4[i].x2 = value; }
|
||||
|
58
gcc/testsuite/gcc.target/nios2/lo-addr-uchar.c
Normal file
58
gcc/testsuite/gcc.target/nios2/lo-addr-uchar.c
Normal file
@ -0,0 +1,58 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2" } */
|
||||
/* { dg-final { scan-assembler-times "addi\tr., r., %lo" 4 } } */
|
||||
/* { dg-final { scan-assembler-times "ldbu\tr., %lo" 20 } } */
|
||||
/* { dg-final { scan-assembler-times "stb\tr., %lo" 4 } } */
|
||||
|
||||
/* Check that various address forms involving a symbolic constant
|
||||
with a possible constant offset and/or index register are optimized
|
||||
to generate a %lo relocation in the load/store instructions instead
|
||||
of a plain register indirect addressing mode. */
|
||||
|
||||
#define TYPE unsigned char
|
||||
|
||||
struct ss
|
||||
{
|
||||
TYPE x1,x2;
|
||||
};
|
||||
|
||||
extern TYPE S1;
|
||||
extern TYPE S2[];
|
||||
|
||||
extern struct ss S3;
|
||||
extern struct ss S4[];
|
||||
|
||||
TYPE *addr1 (void) { return &S1; }
|
||||
TYPE get1 (void) { return S1; }
|
||||
void set1 (TYPE value) { S1 = value; }
|
||||
|
||||
TYPE *addr2 (int i) { return &(S2[i]); }
|
||||
TYPE get2 (int i) { return S2[i]; }
|
||||
void set2 (int i, TYPE value) { S2[i] = value; }
|
||||
|
||||
TYPE *addr3 (void) { return &(S3.x2); }
|
||||
TYPE get3 (void) { return S3.x2; }
|
||||
void set3 (TYPE value) { S3.x2 = value; }
|
||||
|
||||
TYPE *addr4 (int i) { return &(S4[i].x2); }
|
||||
TYPE get4 (int i) { return S4[i].x2; }
|
||||
void set4 (int i, TYPE value) { S4[i].x2 = value; }
|
||||
|
||||
int extw1 (void) { return (int)(S1); }
|
||||
int extw2 (int i) { return (int)(S2[i]); }
|
||||
int extw3 (void) { return (int)(S3.x2); }
|
||||
int extw4 (int i) { return (int)(S4[i].x2); }
|
||||
unsigned int extwu1 (void) { return (unsigned int)(S1); }
|
||||
unsigned int extwu2 (int i) { return (unsigned int)(S2[i]); }
|
||||
unsigned int extwu3 (void) { return (unsigned int)(S3.x2); }
|
||||
unsigned int extwu4 (int i) { return (unsigned int)(S4[i].x2); }
|
||||
|
||||
short exth1 (void) { return (short)(S1); }
|
||||
short exth2 (int i) { return (short)(S2[i]); }
|
||||
short exth3 (void) { return (short)(S3.x2); }
|
||||
short exth4 (int i) { return (short)(S4[i].x2); }
|
||||
unsigned short exthu1 (void) { return (unsigned short)(S1); }
|
||||
unsigned short exthu2 (int i) { return (unsigned short)(S2[i]); }
|
||||
unsigned short exthu3 (void) { return (unsigned short)(S3.x2); }
|
||||
unsigned short exthu4 (int i) { return (unsigned short)(S4[i].x2); }
|
||||
|
49
gcc/testsuite/gcc.target/nios2/lo-addr-ushort.c
Normal file
49
gcc/testsuite/gcc.target/nios2/lo-addr-ushort.c
Normal file
@ -0,0 +1,49 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2" } */
|
||||
/* { dg-final { scan-assembler-times "addi\tr., r., %lo" 4 } } */
|
||||
/* { dg-final { scan-assembler-times "ldhu\tr., %lo" 12 } } */
|
||||
/* { dg-final { scan-assembler-times "sth\tr., %lo" 4 } } */
|
||||
|
||||
/* Check that various address forms involving a symbolic constant
|
||||
with a possible constant offset and/or index register are optimized
|
||||
to generate a %lo relocation in the load/store instructions instead
|
||||
of a plain register indirect addressing mode. */
|
||||
|
||||
#define TYPE unsigned short
|
||||
|
||||
struct ss
|
||||
{
|
||||
TYPE x1,x2;
|
||||
};
|
||||
|
||||
extern TYPE S1;
|
||||
extern TYPE S2[];
|
||||
|
||||
extern struct ss S3;
|
||||
extern struct ss S4[];
|
||||
|
||||
TYPE *addr1 (void) { return &S1; }
|
||||
TYPE get1 (void) { return S1; }
|
||||
void set1 (TYPE value) { S1 = value; }
|
||||
|
||||
TYPE *addr2 (int i) { return &(S2[i]); }
|
||||
TYPE get2 (int i) { return S2[i]; }
|
||||
void set2 (int i, TYPE value) { S2[i] = value; }
|
||||
|
||||
TYPE *addr3 (void) { return &(S3.x2); }
|
||||
TYPE get3 (void) { return S3.x2; }
|
||||
void set3 (TYPE value) { S3.x2 = value; }
|
||||
|
||||
TYPE *addr4 (int i) { return &(S4[i].x2); }
|
||||
TYPE get4 (int i) { return S4[i].x2; }
|
||||
void set4 (int i, TYPE value) { S4[i].x2 = value; }
|
||||
|
||||
int extw1 (void) { return (int)(S1); }
|
||||
int extw2 (int i) { return (int)(S2[i]); }
|
||||
int extw3 (void) { return (int)(S3.x2); }
|
||||
int extw4 (int i) { return (int)(S4[i].x2); }
|
||||
unsigned int extwu1 (void) { return (unsigned int)(S1); }
|
||||
unsigned int extwu2 (int i) { return (unsigned int)(S2[i]); }
|
||||
unsigned int extwu3 (void) { return (unsigned int)(S3.x2); }
|
||||
unsigned int extwu4 (int i) { return (unsigned int)(S4[i].x2); }
|
||||
|
41
gcc/testsuite/gcc.target/nios2/lo-addr-volatile.c
Normal file
41
gcc/testsuite/gcc.target/nios2/lo-addr-volatile.c
Normal file
@ -0,0 +1,41 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -march=r2 -mno-cache-volatile" } */
|
||||
/* { dg-final { scan-assembler-times "addi\tr., r., %lo" 12 } } */
|
||||
/* { dg-final { scan-assembler-not "ldw\t" } } */
|
||||
/* { dg-final { scan-assembler-not "stw\t" } } */
|
||||
/* { dg-final { scan-assembler-not "ldwio\tr., %lo" } } */
|
||||
/* { dg-final { scan-assembler-not "stwio\tr., %lo" } } */
|
||||
|
||||
/* Check that we do not generate %lo addresses with R2 ldstio instructions.
|
||||
%lo requires a 16-bit relocation and on R2 these instructions only have a
|
||||
12-bit register offset. */
|
||||
|
||||
#define TYPE int
|
||||
|
||||
struct ss
|
||||
{
|
||||
TYPE x1,x2;
|
||||
};
|
||||
|
||||
extern volatile TYPE S1;
|
||||
extern volatile TYPE S2[];
|
||||
|
||||
extern volatile struct ss S3;
|
||||
extern volatile struct ss S4[];
|
||||
|
||||
volatile TYPE *addr1 (void) { return &S1; }
|
||||
TYPE get1 (void) { return S1; }
|
||||
void set1 (TYPE value) { S1 = value; }
|
||||
|
||||
volatile TYPE *addr2 (int i) { return &(S2[i]); }
|
||||
TYPE get2 (int i) { return S2[i]; }
|
||||
void set2 (int i, TYPE value) { S2[i] = value; }
|
||||
|
||||
volatile TYPE *addr3 (void) { return &(S3.x2); }
|
||||
TYPE get3 (void) { return S3.x2; }
|
||||
void set3 (TYPE value) { S3.x2 = value; }
|
||||
|
||||
volatile TYPE *addr4 (int i) { return &(S4[i].x2); }
|
||||
TYPE get4 (int i) { return S4[i].x2; }
|
||||
void set4 (int i, TYPE value) { S4[i].x2 = value; }
|
||||
|
Loading…
x
Reference in New Issue
Block a user