Executable test case for asm flags, by David Wohlferd.
* gcc.target/i386/asm-flag-6.c: New test. From-SVN: r234900
This commit is contained in:
parent
d97633ef65
commit
3df530d3df
2 changed files with 280 additions and 0 deletions
|
@ -1,3 +1,7 @@
|
|||
2016-04-12 David Wohlferd <dw@LimeGreenSocks.com>
|
||||
|
||||
* gcc.target/i386/asm-flag-6.c: New test.
|
||||
|
||||
2016-04-12 Tom de Vries <tom@codesourcery.com>
|
||||
|
||||
PR tree-optimization/68756
|
||||
|
|
276
gcc/testsuite/gcc.target/i386/asm-flag-6.c
Normal file
276
gcc/testsuite/gcc.target/i386/asm-flag-6.c
Normal file
|
@ -0,0 +1,276 @@
|
|||
/* Executable testcase for 'output flags.' */
|
||||
/* { dg-do run } */
|
||||
|
||||
char TestC ()
|
||||
{
|
||||
char r;
|
||||
|
||||
__asm__ ("stc" : "=@ccc"(r));
|
||||
if (r)
|
||||
{
|
||||
__asm__ ("clc" : "=@ccnc"(r));
|
||||
if (r)
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
char TestE ()
|
||||
{
|
||||
char r;
|
||||
|
||||
/* 1 equals 1. */
|
||||
__asm__ ("cmp $1, %1" : "=@cce"(r) : "r" (1));
|
||||
if (r)
|
||||
{
|
||||
/* 1 not equals 2. */
|
||||
__asm__ ("cmp $2, %1" : "=@ccne"(r) : "r" (1));
|
||||
if (r)
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
char TestZ ()
|
||||
{
|
||||
char r;
|
||||
|
||||
/* 1 equals 1. */
|
||||
__asm__ ("cmp $1, %1" : "=@ccz"(r) : "r" (1));
|
||||
if (r)
|
||||
{
|
||||
/* 1 not equals 2. */
|
||||
__asm__ ("cmp $2, %1" : "=@ccnz"(r) : "r" (1));
|
||||
if (r)
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
char TestA ()
|
||||
{
|
||||
char r;
|
||||
|
||||
/* 1 a 0. */
|
||||
__asm__ ("cmp $0, %1" : "=@cca"(r) : "r" (1));
|
||||
if (r)
|
||||
{
|
||||
/* 1 na 2. */
|
||||
__asm__ ("cmp $2, %1" : "=@ccna"(r) : "r" (1));
|
||||
if (r)
|
||||
{
|
||||
/* 1 na 1. */
|
||||
__asm__ ("cmp $1, %1" : "=@ccna"(r) : "r" (1));
|
||||
if (r)
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
char TestAE ()
|
||||
{
|
||||
char r;
|
||||
|
||||
/* 1 ae 0. */
|
||||
__asm__ ("cmp $0, %1" : "=@ccae"(r) : "r" (1));
|
||||
if (r)
|
||||
{
|
||||
/* 1 nae 2. */
|
||||
__asm__ ("cmp $2, %1" : "=@ccnae"(r) : "r" (1));
|
||||
if (r)
|
||||
{
|
||||
/* 1 ae 1. */
|
||||
__asm__ ("cmp $1, %1" : "=@ccae"(r) : "r" (1));
|
||||
if (r)
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
char TestB ()
|
||||
{
|
||||
char r;
|
||||
|
||||
/* 1 b 2. */
|
||||
__asm__ ("cmp $2, %1" : "=@ccb"(r) : "r" (1));
|
||||
if (r)
|
||||
{
|
||||
/* 1 nb 0. */
|
||||
__asm__ ("cmp $0, %1" : "=@ccnb"(r) : "r" (1));
|
||||
if (r)
|
||||
{
|
||||
/* 1 nb 1. */
|
||||
__asm__ ("cmp $1, %1" : "=@ccnb"(r) : "r" (1));
|
||||
if (r)
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
char TestBE ()
|
||||
{
|
||||
char r;
|
||||
|
||||
/* 1 be 2. */
|
||||
__asm__ ("cmp $2, %1" : "=@ccbe"(r) : "r" (1));
|
||||
if (r)
|
||||
{
|
||||
/* 1 nbe 0. */
|
||||
__asm__ ("cmp $0, %1" : "=@ccnbe"(r) : "r" (1));
|
||||
if (r)
|
||||
{
|
||||
/* 1 be 1. */
|
||||
__asm__ ("cmp $1, %1" : "=@ccbe"(r) : "r" (1));
|
||||
if (r)
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
char TestG ()
|
||||
{
|
||||
char r;
|
||||
|
||||
/* 1 g 0. */
|
||||
__asm__ ("cmp $0, %1" : "=@ccg"(r) : "r" (1));
|
||||
if (r)
|
||||
{
|
||||
/* 1 ng 2. */
|
||||
__asm__ ("cmp $2, %1" : "=@ccng"(r) : "r" (1));
|
||||
if (r)
|
||||
{
|
||||
/* 1 ng 1. */
|
||||
__asm__ ("cmp $1, %1" : "=@ccng"(r) : "r" (1));
|
||||
if (r)
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
char TestGE ()
|
||||
{
|
||||
char r;
|
||||
|
||||
/* 1 ge 0. */
|
||||
__asm__ ("cmp $0, %1" : "=@ccge"(r) : "r" (1));
|
||||
if (r)
|
||||
{
|
||||
/* 1 nge 2. */
|
||||
__asm__ ("cmp $2, %1" : "=@ccnge"(r) : "r" (1));
|
||||
if (r)
|
||||
{
|
||||
/* 1 ge 1. */
|
||||
__asm__ ("cmp $1, %1" : "=@ccge"(r) : "r" (1));
|
||||
if (r)
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
char TestL ()
|
||||
{
|
||||
char r;
|
||||
|
||||
/* 1 l 2. */
|
||||
__asm__ ("cmp $2, %1" : "=@ccl"(r) : "r" (1));
|
||||
if (r)
|
||||
{
|
||||
/* 1 nl 0. */
|
||||
__asm__ ("cmp $0, %1" : "=@ccnl"(r) : "r" (1));
|
||||
if (r)
|
||||
{
|
||||
/* 1 nl 1. */
|
||||
__asm__ ("cmp $1, %1" : "=@ccnl"(r) : "r" (1));
|
||||
if (r)
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
char TestLE ()
|
||||
{
|
||||
char r;
|
||||
|
||||
/* 1 le 2. */
|
||||
__asm__ ("cmp $2, %1" : "=@ccle"(r) : "r" (1));
|
||||
if (r)
|
||||
{
|
||||
/* 1 nle 0. */
|
||||
__asm__ ("cmp $0, %1" : "=@ccnle"(r) : "r" (1));
|
||||
if (r)
|
||||
{
|
||||
/* 1 le 1. */
|
||||
__asm__ ("cmp $1, %1" : "=@ccle"(r) : "r" (1));
|
||||
if (r)
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
char TestO ()
|
||||
{
|
||||
char r;
|
||||
unsigned char res = 128;
|
||||
|
||||
/* overflow. */
|
||||
__asm__ ("addb $128, %1" : "=@cco"(r), "+r"(res));
|
||||
if (r)
|
||||
{
|
||||
/* not overflow. */
|
||||
__asm__ ("addb $1, %1" : "=@ccno"(r), "+r"(res));
|
||||
if (r)
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
char TestP ()
|
||||
{
|
||||
char r, res = 1;
|
||||
|
||||
/* even # bits. */
|
||||
__asm__ ("addb $2, %1" : "=@ccp"(r), "+r"(res));
|
||||
if (r)
|
||||
{
|
||||
/* odd # bits. */
|
||||
__asm__ ("addb $1, %1" : "=@ccnp"(r), "+r"(res));
|
||||
if (r)
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
char TestS ()
|
||||
{
|
||||
char r, res = 1;
|
||||
|
||||
/* sign bit set. */
|
||||
__asm__ ("addb $128, %1" : "=@ccs"(r), "+r"(res));
|
||||
if (r)
|
||||
{
|
||||
/* sign bit not set. */
|
||||
__asm__ ("subb $128, %1" : "=@ccns"(r), "+r"(res));
|
||||
if (r)
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* dg-do treats exit code of 0 as success. */
|
||||
int main ()
|
||||
{
|
||||
if (TestC () && TestE () && TestZ () && TestA ()
|
||||
&& TestAE () && TestB () && TestBE () && TestG ()
|
||||
&& TestGE () && TestL () && TestLE () && TestO ()
|
||||
&& TestP () && TestS ())
|
||||
return 0;
|
||||
__builtin_abort ();
|
||||
}
|
Loading…
Add table
Reference in a new issue