aboutsummaryrefslogtreecommitdiff
path: root/i386-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 /i386-gen.c
parentfc0fc6aba3d8fce415325b76fcd1499365d448ea (diff)
downloadtinycc-e238e6521bcbbc3a4ff6d795564b8f2d322de349.tar.gz
tinycc-e238e6521bcbbc3a4ff6d795564b8f2d322de349.tar.bz2
gtst_addr(): short conditional jumps (i386, x86_64)
Diffstat (limited to 'i386-gen.c')
-rw-r--r--i386-gen.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/i386-gen.c b/i386-gen.c
index eace2df..79087d0 100644
--- a/i386-gen.c
+++ b/i386-gen.c
@@ -695,6 +695,19 @@ ST_FUNC 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 */
ST_FUNC int gtst(int inv, int t)
{