Implement C99 negation.

!a is 1 if a == 0 and 0 otherwise.
This commit is contained in:
Andrius Štikonas 2021-10-29 00:52:27 +01:00
parent d8fb878d7a
commit a900bc6632
2 changed files with 67 additions and 67 deletions

View File

@ -1272,20 +1272,20 @@ void primary_expr()
}
else if('!' == global_token->s[0])
{
if(X86 == Architecture) emit_out("LOAD_IMMEDIATE_eax %1\n");
if((KNIGHT_POSIX == Architecture) || (KNIGHT_NATIVE == Architecture)) emit_out("LOADI R0 1\n");
else if(X86 == Architecture) emit_out("LOAD_IMMEDIATE_eax %1\n");
else if(AMD64 == Architecture) emit_out("LOAD_IMMEDIATE_rax %1\n");
else if(ARMV7L == Architecture) emit_out("!1 R0 LOADI8_ALWAYS\n");
else if(AARCH64 == Architecture) emit_out("SET_X0_TO_1\n");
else if(RISCV64 == Architecture) emit_out("RD_A0 !1 ADDI\n");
common_recursion(postfix_expr);
if((KNIGHT_POSIX == Architecture) || (KNIGHT_NATIVE == Architecture)) emit_out("XORI R0 R0 1\n");
else if(X86 == Architecture) emit_out("XOR_ebx_eax_into_eax\n");
else if(AMD64 == Architecture) emit_out("XOR_rbx_rax_into_rax\n");
else if(ARMV7L == Architecture) emit_out("'0' R0 R0 XOR R1 ARITH2_ALWAYS\n");
else if(AARCH64 == Architecture) emit_out("XOR_X0_X1_X0\n");
else if(RISCV64 == Architecture) emit_out("RD_A0 RS1_A1 RS2_A0 XOR\n");
if((KNIGHT_POSIX == Architecture) || (KNIGHT_NATIVE == Architecture)) emit_out("CMPU R0 R1 R0\nSET.G R0 R0 1\n");
else if(X86 == Architecture) emit_out("CMP\nSETA\nMOVEZBL\n");
else if(AMD64 == Architecture) emit_out("CMP\nSETA\nMOVEZX\n");
else if(ARMV7L == Architecture) emit_out("'0' R0 CMP R1 AUX_ALWAYS\n!0 R0 LOADI8_ALWAYS\n!1 R0 LOADI8_HI\n");
else if(AARCH64 == Architecture) emit_out("CMP_X1_X0\nSET_X0_TO_1\nSKIP_INST_HI\nSET_X0_TO_0\n");
else if(RISCV64 == Architecture) emit_out("RD_A0 RS1_A0 !1 SLTIU\n");
}
else if('~' == global_token->s[0])
{

View File

@ -26,13 +26,13 @@ d6d358a6669de5253fb3db19b9e54d4fe787b0e921f44794e5ba8bb7138fda5a test/results/t
700def52f229eec7d528e6475d57a8c0b63c0f506b0c3660cdeb2fc61b82c26a test/results/test0003-knight-posix-binary
2e4d21636421fed2e4ad1e8b985fde57f4421dcb57f5144d95a780072abfb716 test/results/test0003-riscv64-binary
a56aa004f9ee964a6209286287096d611306a4c576f2d661ad4a3624af586087 test/results/test0003-x86-binary
1410610a3ed8489bb1a9b303c6cc6cda30bf9d4ff38a4d4eea22fb0ff59767a6 test/results/test0004-aarch64-binary
907f8200ae8e8a37e3395133e145fac71cbcaf06cdf2ef65f3836bdee9a0de1c test/results/test0004-amd64-binary
8e500a2e656733b287865f204dcac9927fa66d1b88db901c2270239154d34ae8 test/results/test0004-armv7l-binary
57baae66407945a8a2b6ea3926dc21026323f084b5c4acc01a5fcdb991120561 test/results/test0004-knight-native-binary
2de9a092afeb1a088ffc45facc0540646c0d845cf36b1a45bfb364a4b1278854 test/results/test0004-knight-posix-binary
1a3a7e68acb22f3f04d3e92253e1af0a51fe4b2b76a42cec1c467bf1ed57887e test/results/test0004-riscv64-binary
37834c4b042aeafb13e80f4540dca147dd3f229d0e3588286f58b13e08e53a2e test/results/test0004-x86-binary
35255ab8de43fcfe7111c140f4af6c6f4b04657469181826fbda31562205963e test/results/test0004-aarch64-binary
57005429f09e5045f92ad2805d4be4282230d48ce9cbee347f27abde7f72f85d test/results/test0004-amd64-binary
71433b3c1b6120d71efa17123ce3e47037f0227cce045616651ca397690636f4 test/results/test0004-armv7l-binary
edb1989309249cfea055c6fc99e3eb9f9b548c17325040d1ccffe4aa068de63e test/results/test0004-knight-native-binary
ebb6eec7952a47c96b85cf99efe6938c3f76db1bf75e60414340811e6c018398 test/results/test0004-knight-posix-binary
b2cf59f78c85af48eb87459b482cb220ad3d39e22c4485b5b4186eaa44c27f5e test/results/test0004-riscv64-binary
a98456efe44683493c686d3f96ac5fbf7afca096dd202ab584e88a431016fcef test/results/test0004-x86-binary
9216135390b7e9502c27fe43571315281cc4b5313bd473788c5f1f12f23a91ad test/results/test0005-aarch64-binary
c10cefe7a3ac6b8c7f6155d6b791f2d503e91bd0cb5f6b2effb6a64b6ecb3565 test/results/test0005-amd64-binary
8f7107595948a52a1bb45b28bd003772d0748eb7b95046e1ffa4bd41995d37c7 test/results/test0005-armv7l-binary
@ -128,12 +128,12 @@ f51b21429495aca86e4da1e1f97561f2ad95f9db03ea599f116a74fa38b20874 test/results/t
f6447861295901e5688202df55091e3e7fa5a06f2d7882f841a0da8b9054b53d test/results/test0018-knight-posix-binary
81a1ce54af6f8069d17a4d2574ec0985687103033b001a621437ad0823a7b169 test/results/test0018-riscv64-binary
e0964d7ed2875353d563d9b8505c8b245b0814ffa2b95dcff3bf1ce42aea0359 test/results/test0018-x86-binary
b3634bb37ce7285795076df9326f8aa645755e2ab9019083da6de988387aeaf4 test/results/test0019-aarch64-binary
680c41682d3e6d1ac9a9decabce38e509ae09b2bf2c3fceabe4748166ba227e7 test/results/test0019-amd64-binary
bfc5de309050856cf34caca6793d12495884cd2500cb557d23a63e9a208ca727 test/results/test0019-armv7l-binary
ad4206531d381639e2367ea203c94ff7f654825a3fa5f354c0aded728b101067 test/results/test0019-knight-posix-binary
de57747a7cc0ad58323abf3e7832552868263145555a5e6be0c90f3ef0af360d test/results/test0019-riscv64-binary
feb79bec4e81edbc9dc4772432f2a11a4e1f4dee90bb6292ef05968c279b324f test/results/test0019-x86-binary
9fcc1d1f1c02dd41f4586a58a06f35a98420efc803792860aee2945797ad240e test/results/test0019-aarch64-binary
3fcc9f09df4a7fa689fb3d29d5f69823311b9e37a3b273f1f062dc6369376af3 test/results/test0019-amd64-binary
987b80506395c0380808228ccc80044419ac3817af0a26b0d205ccaad31a3363 test/results/test0019-armv7l-binary
3e3c128fff2a85a85fe68fe5525f8bf3503dd4b47bd9686bd9cca55b4687c58f test/results/test0019-knight-posix-binary
7812dba8350b40d612b19482e55bfe35ff2b2f517a1e39828f8523fad28de6c4 test/results/test0019-riscv64-binary
a21147e2ae062b57e55c24eb55e9942b770922cd1c9c53348e5fe101d91dd5fa test/results/test0019-x86-binary
43475701b498d648d5246b3cef25dadc5ecab248c84bc5aa4566b13a1689ff1f test/results/test0020-aarch64-binary
bb03c8c1dd714423ddea7e06708488d83eb86d941b25d631bae02a915c483ad4 test/results/test0020-amd64-binary
17a1a46da1607f4bdfbb24c0902c6c8d28580fe4cfacdd5e931fa42732917ca7 test/results/test0020-armv7l-binary
@ -141,18 +141,18 @@ ead4f942d4a0fd3c48968ea88357a015145eec1c22be446bdc604d49f766eb0e test/results/t
4fd2a92e4ff7a9d472b6f41a45124a6750f5193a4d5e3f43c291ddf29725a517 test/results/test0020-knight-posix-binary
d51d3e89ab40e572eebeeec7795ea0f7b976a8fceff0c9b22bf6988d79cf5f91 test/results/test0020-riscv64-binary
d555181ec1a1e2f647a7e161b6c68b88f8b7e3f07a832e324beb959d5db770a6 test/results/test0020-x86-binary
f70268ceee206bb95124a913882d185d8a1de9f9cd668f7dd6d0d32fc2b8c65e test/results/test0021-aarch64-binary
a6706bd32fa7c69c906eb874ef7113fa7da2e0f9a0008cb7a22cc1d9824aa8c2 test/results/test0021-amd64-binary
53082029dbae7b866e1fc9c195db4ab6421efeb8503ac7fa1d592a97ddd4a5d4 test/results/test0021-armv7l-binary
e9d556be6a33c87d51d572854e263012dcc3578bca46aeb8272ecd30109e004d test/results/test0021-knight-posix-binary
4a0f97717fa262e7185ed81ffe7d87d52866986773d51c52b741f4ca20b1f6be test/results/test0021-riscv64-binary
c4bfa05c879ed6dddcd03c89569fbf19cb6843e2c485e5ff21b519b8ca030b62 test/results/test0021-x86-binary
cb7c0d09d2468dfbad4e275ea2f0820dabbfa1ef49596f302074dc420dc2e2b6 test/results/test0022-aarch64-binary
7910c2ef089dc53864af990270b98f811d8aa30ca544582460de2aaecc8a0f41 test/results/test0022-amd64-binary
ccc06f44897513c665472731d587ee3e08268115710c67bb90e0d8b0e20585d7 test/results/test0022-armv7l-binary
8665a85fc02517337e7e1d51bb163154bbc894276715b05f640baea414fb640c test/results/test0022-knight-posix-binary
37cfa633d2af9f7bc882b2d0b7fd8179659cc04ec8c92e0a5950fa9ab855c23f test/results/test0022-riscv64-binary
a405efc6fdf369e1590d68c05a0a763c0dbf4b70e34caab1f68e57c21c1cbdc8 test/results/test0022-x86-binary
b0bddd2529ee6b5904d6c2806eab9885472223ec64b11b909ba3c29bb0ffd95d test/results/test0021-aarch64-binary
4f10aa17a2925326109d5760d04a20c3b4baada118885b5ac7ab490ff95bc79e test/results/test0021-amd64-binary
47c187696cb71ccae1b5fd36270544845d2d5130c4c653ce5d8d1faa6b1c1fdc test/results/test0021-armv7l-binary
b72d2c3b4b23edbe2ed7e9cc5abb9b5196151cb6da788837bdd48585ecac4a49 test/results/test0021-knight-posix-binary
7e70c54e30f8cdb4d580bc3d27b840fa136b1f75a84188729f5e7a4dedf2f56b test/results/test0021-riscv64-binary
46c1422aed16564a37db2d28a08bce626fa9483ceba4d36ce28fe6e3c8bd075a test/results/test0021-x86-binary
72139bed2ae2a583dcd8d8181824d7e0793ae3be941b59aec1a0874f24ece246 test/results/test0022-aarch64-binary
1d386d6a3d764150f8535048e31158ca490f6f8030fd0bcb67d731a8055f1d87 test/results/test0022-amd64-binary
02f74f8e6d62394be8bd5607be1bb9a0b2f48e1146b0d721f9da67f22c8de8e9 test/results/test0022-armv7l-binary
fe999543e213553be26cf2715abfe5512f835c7b635c99047f66fde7c471307c test/results/test0022-knight-posix-binary
c666149b8eb9f5a0ab1e220c9f7592672934ebe602617b27b6d60d3ccbfa22d9 test/results/test0022-riscv64-binary
33513338e8a8af1e084b61eef7e3fd23fb799eec96490093df250d13e9e1d286 test/results/test0022-x86-binary
7c89643fc880073f9d2dc2e129470a03d82b86e5f0eb7ca3e635ed40eaa85e71 test/results/test0023-aarch64-binary
e3416188528883842f5fd2cbfe699c6d8a23b63bb4d18ca30eae13a45e1d8922 test/results/test0023-amd64-binary
7522e37632adbfd9b829885c6a1a04561abf4fd3921311877879b8578219dda7 test/results/test0023-armv7l-binary
@ -177,34 +177,34 @@ bc2666096825062ad5bf840e94fe1fe26b37bef2d024d642cc237f98c65fcccc test/results/t
a41f2c83c97c037b70712755a1e08716cbcf6da916c668993aef5d264f5c5ac5 test/results/test0100-knight-posix-binary
cc0a1895d177aa7033c9f1e62808c680a54e3518a511fa2d284b413e60030394 test/results/test0100-riscv64-binary
221f495185d38cf64d699cfa0a893c2eb1621fd70d16ebc385153f9411448500 test/results/test0100-x86-binary
a281f1c4262bca7dd34e236ba693afe9509a5c5bde8a7e61d4fb2bf4fb80fb4f test/results/test0101-aarch64-binary
7318f0872bf88ab215fba0ce447c392f47e6a691a119c4fab5a45b9316a998c3 test/results/test0101-amd64-binary
f07899efe2ab667c1f8137dbd235042568f485131b64c778391a31497afa2621 test/results/test0101-armv7l-binary
f7714bb5cf7168bba04bb7b38cceaab92e8df4b4a443305235d58490219d44f1 test/results/test0101-knight-posix-binary
c587d205a1f0cdf13d136aec7426bb626c452e96415cf7d721f4935840aace76 test/results/test0101-riscv64-binary
ead6caa8468be14d52e9d81844fb167c140e68de19e398a1311e90161f92ffa7 test/results/test0101-x86-binary
30cdc11e7be5e441a6d9b12ba8b398e413403023bd6dc85fe4075f830bcd5d5b test/results/test0102-aarch64-binary
9186879ba33ac2005562b3f9331439743ef86df7703fb1266bb0cabb362fe661 test/results/test0102-amd64-binary
3fa8c277f27cab6d447e68ce9aa2cad0ab8790e513d753ec712dfb5ae8b4d365 test/results/test0102-armv7l-binary
6617cf46214cb085ad9ab72b72ad8bf30011c2a8dbbb8e86cbb7e9b971562842 test/results/test0102-knight-posix-binary
23200709dfdb3fe99d5b872980069f6f4331a98db7643df1fcdbd1f4ce8566eb test/results/test0102-riscv64-binary
db1ea5f9f336af7efd6e7c65b89e72190b513ac01b6123f60dffb90820fdf3b1 test/results/test0102-x86-binary
1d76a736a9f4089dd8ffa6a404f768dc72f6c87ea0fc9efd859fdf43d6b29fe1 test/results/test0103-aarch64-binary
caee5ec7476883435534779cb7e1d3b468464071601c2f1e200e897c77f3f9b0 test/results/test0103-amd64-binary
232cb739cb9f7ee6706967617c1115336c342a4c62a11f156c9ed72c4a68d614 test/results/test0103-armv7l-binary
40124d2a5add616c6282dd4c1fcda35e78962f19b887f578f7a0747fdc67dc83 test/results/test0103-knight-posix-binary
a79c757bcfedb49fce4aede89c8e4e773bd087d6ea95491c712cbcd7ac806e27 test/results/test0103-riscv64-binary
f63ebb32f3b44e60ff60b50cf9721e09583b71fb608402f0531ebe6381853638 test/results/test0103-x86-binary
1955401bfea2e675d5bd5ede42a2b96a858218dd023964e363f09320a26d8ef5 test/results/test0104-aarch64-binary
76c2d9e2bbb6051f7433aa5a6eaf5db24571b87bb329aaf214b02e836977fae4 test/results/test0104-amd64-binary
e4809e3dd09e12c23de76872f4220cd80cb46f8337653a8c2e33e7a5b97e8a17 test/results/test0104-armv7l-binary
4268022d744b84c9ecb85867147ded1d1478369daa2d6447d51863d12063e834 test/results/test0104-riscv64-binary
ea128db10e8eea2842cba9cd38e88190eb84670ef1dd92f67ecfd0b592d3a107 test/results/test0104-x86-binary
7af3ac6467fccfa9a5eaaf5728df6d840c898fe85af79df89de72b060f42b70c test/results/test0105-aarch64-binary
7f823b5fecee2649b2e64621c1689ad1283d1be25d847394b3b5299d1cb72b3a test/results/test0105-amd64-binary
46b1c077d240f8ef11de323ed2790cf8c955f1ea1df06a27858e7515bd691b52 test/results/test0105-armv7l-binary
d0d1a58465c7bbc2be5b25adea620a7c621fdb7bb16277f26f45e70c6a4794cd test/results/test0105-riscv64-binary
9832bfe1c81fcc43d18dd9f965ead57cad0342fd867036758206efbc275509f1 test/results/test0105-x86-binary
6540bbe5c06adfd3d162197c2c33f75936913b47bdbfc5b48ba0ce01b4995840 test/results/test0101-aarch64-binary
80fd9a7b43dfba04b87b50046cdf3e8adbbad4300331e28cf62e4e3aeb0bdbd3 test/results/test0101-amd64-binary
de2dbfc6c00fe1e6a0a685f9f103f462857a74205bd8368f52933887d141d6dd test/results/test0101-armv7l-binary
1c0a40f524edbbcaad7e58b4c8c949299f4f6e1c81663990d6b956eee4406c20 test/results/test0101-knight-posix-binary
d9cc92025206a788c300c20cc77513a94b9ac97ecfb67c48a4e1c97d315399ac test/results/test0101-riscv64-binary
52d099e59607d7b192f7de95c870e8f753fe03d00674bfbeab3293b7796a7801 test/results/test0101-x86-binary
d3a8c1a1996c6e0dc15df146ffbd0904a22396c7c695719be59e23404ffae90f test/results/test0102-aarch64-binary
7a3fba04443ae81d8e60f371f66bf710fb9f430011e3a4d3b9a80585186719ba test/results/test0102-amd64-binary
df5319bfca446a006591fdf54fabfa6069d8eaecf5ed3ffa2d725aa9dd43ea07 test/results/test0102-armv7l-binary
801bda8a34306f4246b8f5a6b84f96ecce49cc41a6af307304e986ab47ac9f1b test/results/test0102-knight-posix-binary
3143bcdc4089bebbe5d73ccc224611732524e38e2064c3ce3e3ce4329a900a97 test/results/test0102-riscv64-binary
5530eaa67a2b5c69de3f4ae35a7bd0cee04e9590ed019bca4710b95cf55f8e2c test/results/test0102-x86-binary
26c45c99e52fb190bf7edee34871efd5b2a9ab2e6015d230b65d8a9bb392ffab test/results/test0103-aarch64-binary
7f77190dabdcadda0edb487830a01db555a3a5d68113a8a25bd13e0cc01548a8 test/results/test0103-amd64-binary
053435f9f9dfeef2a1915b7dfcb79ebab739fa1eda07f18c82d73c30b6ec7a78 test/results/test0103-armv7l-binary
074bc201b8fa18ad990f4bcef719c545338f5a16d5f2e65a6887c40e4c725da8 test/results/test0103-knight-posix-binary
df66401e39c9547e7da54b60685aaf0d41a1ffb8b92af0b215243ea4f0423a20 test/results/test0103-riscv64-binary
f9422c80fe6f61b8d980f5732165fb3f5de3e936c3255b31e9ce54b5d226aa02 test/results/test0103-x86-binary
55b956ce08ff2686a1776f05a67520b6155b714590227fd873613dfdda0b412c test/results/test0104-aarch64-binary
2503653c76bdbe7769609335f4bf992e8a825e8363c2201ecab6586621b880f0 test/results/test0104-amd64-binary
210d0c33d7936e59898b2ab5b368fda190bf0805d626d1d7ecac8294c6ae29ab test/results/test0104-armv7l-binary
09e75b87ff997c1d69d06e9a231c87798ce91c9832afc6e521d75ee4fee50e2d test/results/test0104-riscv64-binary
ee06037811ee75d750a34ada90a04d18001506b833717339b186ebedeeba2632 test/results/test0104-x86-binary
4583b98a125dca7a1b870e95ffd7aa2cb9054ff03b803d1606adf5004a0463ad test/results/test0105-aarch64-binary
f853efe5c776228c6334e09521b0653735b2e5f0e76863b47d2a07caada7c151 test/results/test0105-amd64-binary
ed830495864dd849ccd8896a728a52bde9be179690db808f7e14144cf3dcbfa3 test/results/test0105-armv7l-binary
e831f44d688f3e73b35dcb17a3eb5b2ecd72005f5c407d89770508ff98863f9e test/results/test0105-riscv64-binary
b02855fed0b4040ab8b7f2711b62967032b7cb52135dd3187e29642713c311fe test/results/test0105-x86-binary
eb1f6aab09a1a4966f9f49a518d8aa03ca97aa7c46e443871d758a306671a85e test/results/test0106-aarch64-binary
1eaf43e60d9304fe45ca492a673e6b179b45da211542140cbdaa19f14affde9f test/results/test0106-amd64-binary
15f5b35c7b10be4b41fde817fb529d950d1f06b0cb890a2dbae0cb66a203463f test/results/test0106-armv7l-binary
@ -212,9 +212,9 @@ eb1f6aab09a1a4966f9f49a518d8aa03ca97aa7c46e443871d758a306671a85e test/results/t
a2cbfd5f76d3be8049c6737e3fa02f191caf29b6885db006fa23f86e6eacc186 test/results/test0106-knight-posix-binary
d75e450e2fcdf19df63f9d6a3fe5e032933e57b33f6f06b39a8ed2f3dc759f17 test/results/test0106-riscv64-binary
473cc504d6cba9eaf648abcf15c83a317ff3f4a7f08f5e8936e3b35b2cc4fbc6 test/results/test0106-x86-binary
d120d662f78dbc3f0a81ba777847d3aaa2363b0f13f039066d2cb45e4a89477d test/results/test1000-aarch64-binary
3a5a71519bb54514d832a51f464329fe1e171f2c9a49e4251ba2198466b0f8e3 test/results/test1000-amd64-binary
74941c9a1ec9ab8c9534cda69c562a5da2a50d33e549c970b49860805ac26bc5 test/results/test1000-armv7l-binary
bebcc13cb938bea42bf018a6bcf3e69e8a7365b2ce8202805bab3091df1ddb82 test/results/test1000-knight-posix-binary
0867008fddffe0115ade51505f25a688d27c9bedff1b7b9658c388bbccd233c7 test/results/test1000-riscv64-binary
0fc90e4f9401ab0c93a6e76b9e9fd0cbe780588223bf970641b5fe47809c76dc test/results/test1000-x86-binary
57fea76f6b769284fc64f4b80ab6b1859d56a9810c563c5e2f18cbea1eee2cd0 test/results/test1000-aarch64-binary
02ec3f7cf3359e6d6b7abce74cb59aa75df73c7275c9e3d16a42daa6f0eb81e8 test/results/test1000-amd64-binary
9b6e60a3e874b3d53ea616b857e360a7b2ad12297c020ccba6c834a965e224aa test/results/test1000-armv7l-binary
51596bd8a6afea9c888fb5e14b6a965557d04df291f0bd818477229df5ab5ee7 test/results/test1000-knight-posix-binary
41b3cbd0e742f98c49e220edb52e0cdcca92a170bdcfdd9d5dafb4106ee97aba test/results/test1000-riscv64-binary
13a684245ab8b33ee52d6d9d97ee169e8dab5915b139dfcc1cae5e40bc699847 test/results/test1000-x86-binary