cproc

Unnamed repository; edit this file 'description' to name the repository.
git clone git://git.nihaljere.xyz/cproc
Log | Files | Refs | Submodules | README | LICENSE

commit 3cc28c8428306a66350ef3722d45ed8c49bc6f15
parent d875bf74986b87378f80d7be4cd08e8eb8e91c65
Author: Michael Forney <mforney@mforney.org>
Date:   Wed,  3 Jul 2019 00:18:50 -0700

Implement no-op __builtin_expect

Diffstat:
Mcc.h | 1+
Mexpr.c | 7+++++++
Mscope.c | 1+
Atest/builtin-expect.c | 4++++
Atest/builtin-expect.qbe | 8++++++++
5 files changed, 21 insertions(+), 0 deletions(-)

diff --git a/cc.h b/cc.h @@ -236,6 +236,7 @@ enum linkage { enum builtinkind { BUILTINALLOCA, BUILTINCONSTANTP, + BUILTINEXPECT, BUILTININFF, BUILTINNANF, BUILTINOFFSETOF, diff --git a/expr.c b/expr.c @@ -565,6 +565,13 @@ builtinfunc(struct scope *s, enum builtinkind kind) case BUILTINCONSTANTP: e = mkconstexpr(&typeint, eval(condexpr(s), EVALARITH)->kind == EXPRCONST); break; + case BUILTINEXPECT: + /* just a no-op for now */ + /* TODO: check that the expression and the expected value have type 'long' */ + e = assignexpr(s); + expect(TCOMMA, "after expression"); + delexpr(assignexpr(s)); + break; case BUILTININFF: e = mkexpr(EXPRCONST, &typefloat); /* TODO: use INFINITY here when we can handle musl's math.h */ diff --git a/scope.c b/scope.c @@ -16,6 +16,7 @@ scopeinit(void) } builtins[] = { {"__builtin_alloca", {.kind = DECLBUILTIN, .builtin = BUILTINALLOCA}}, {"__builtin_constant_p", {.kind = DECLBUILTIN, .builtin = BUILTINCONSTANTP}}, + {"__builtin_expect", {.kind = DECLBUILTIN, .builtin = BUILTINEXPECT}}, {"__builtin_inff", {.kind = DECLBUILTIN, .builtin = BUILTININFF}}, {"__builtin_nanf", {.kind = DECLBUILTIN, .builtin = BUILTINNANF}}, {"__builtin_offsetof", {.kind = DECLBUILTIN, .builtin = BUILTINOFFSETOF}}, diff --git a/test/builtin-expect.c b/test/builtin-expect.c @@ -0,0 +1,4 @@ +int x; +int main(void) { + return __builtin_expect(x, 0); +} diff --git a/test/builtin-expect.qbe b/test/builtin-expect.qbe @@ -0,0 +1,8 @@ +export +function w $main() { +@start.1 +@body.2 + %.1 =w loadsw $x + ret %.1 +} +export data $x = align 4 { z 4 }