1
2/* Compiler implementation of the D programming language
3 * Copyright (C) 2018-2019 by The D Language Foundation, All Rights Reserved
4 * written by Walter Bright
5 * http://www.digitalmars.com
6 * Distributed under the Boost Software License, Version 1.0.
7 * http://www.boost.org/LICENSE_1_0.txt
8 * https://github.com/D-Programming-Language/dmd/blob/master/src/iasm.c
9 */
10
11/* Inline assembler for the D programming language compiler
12 */
13
14#include "scope.h"
15#include "declaration.h"
16#include "statement.h"
17
18#ifdef IN_GCC
19Statement *gccAsmSemantic(GccAsmStatement *s, Scope *sc);
20#else
21Statement *inlineAsmSemantic(InlineAsmStatement *s, Scope *sc);
22#endif
23
24Statement *asmSemantic(AsmStatement *s, Scope *sc)
25{
26    //printf("AsmStatement::semantic()\n");
27
28    FuncDeclaration *fd = sc->parent->isFuncDeclaration();
29    assert(fd);
30
31    if (!s->tokens)
32        return NULL;
33
34    // Assume assembler code takes care of setting the return value
35    sc->func->hasReturnExp |= 8;
36
37#ifdef IN_GCC
38    GccAsmStatement *eas = new GccAsmStatement(s->loc, s->tokens);
39    return gccAsmSemantic(eas, sc);
40#else
41    InlineAsmStatement *ias = new InlineAsmStatement(s->loc, s->tokens);
42    return inlineAsmSemantic(ias, sc);
43#endif
44}
45