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