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 19 Statement *gccAsmSemantic(GccAsmStatement *s, Scope *sc); 20 #else 21 Statement *inlineAsmSemantic(InlineAsmStatement *s, Scope *sc); 22 #endif 23 24 Statement *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