aboutsummaryrefslogtreecommitdiff
path: root/x86_64-gen.c
diff options
context:
space:
mode:
authorPavlas, Zdenek <zden3k@gmail.com>2016-09-30 07:29:38 -0700
committerPavlas, Zdenek <zden3k@gmail.com>2016-09-30 07:33:20 -0700
commite238e6521bcbbc3a4ff6d795564b8f2d322de349 (patch)
tree137d4b6fc7ab60c010e24050db67f159aed525b8 /x86_64-gen.c
parentfc0fc6aba3d8fce415325b76fcd1499365d448ea (diff)
downloadtinycc-e238e6521bcbbc3a4ff6d795564b8f2d322de349.tar.gz
tinycc-e238e6521bcbbc3a4ff6d795564b8f2d322de349.tar.bz2
gtst_addr(): short conditional jumps (i386, x86_64)
Diffstat (limited to 'x86_64-gen.c')
-rw-r--r--x86_64-gen.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/x86_64-gen.c b/x86_64-gen.c
index 19418fd..921813b 100644
--- a/x86_64-gen.c
+++ b/x86_64-gen.c
@@ -1686,8 +1686,21 @@ void gjmp_addr(int a)
}
}
+ST_FUNC void gtst_addr(int inv, int a)
+{
+ inv ^= (vtop--)->c.i;
+ a -= ind + 2;
+ if (a == (char)a) {
+ g(inv - 32);
+ g(a);
+ } else {
+ g(0x0f);
+ oad(inv - 16, a - 4);
+ }
+}
+
/* generate a test. set 'inv' to invert test. Stack entry is popped */
-int gtst(int inv, int t)
+ST_FUNC int gtst(int inv, int t)
{
int v = vtop->r & VT_VALMASK;
if (v == VT_CMP) {