blob: 5618c9f1125bd4e34adb0edde77975014829a09c [file] [log] [blame]
/* Compiler implementation of the D programming language
* Copyright (C) 2018-2019 by The D Language Foundation, All Rights Reserved
* written by Walter Bright
* http://www.digitalmars.com
* Distributed under the Boost Software License, Version 1.0.
* http://www.boost.org/LICENSE_1_0.txt
* https://github.com/D-Programming-Language/dmd/blob/master/src/iasm.c
*/
/* Inline assembler for the D programming language compiler
*/
#include "scope.h"
#include "declaration.h"
#include "statement.h"
#ifdef IN_GCC
Statement *gccAsmSemantic(GccAsmStatement *s, Scope *sc);
#else
Statement *inlineAsmSemantic(InlineAsmStatement *s, Scope *sc);
#endif
Statement *asmSemantic(AsmStatement *s, Scope *sc)
{
//printf("AsmStatement::semantic()\n");
FuncDeclaration *fd = sc->parent->isFuncDeclaration();
assert(fd);
if (!s->tokens)
return NULL;
// Assume assembler code takes care of setting the return value
sc->func->hasReturnExp |= 8;
#ifdef IN_GCC
GccAsmStatement *eas = new GccAsmStatement(s->loc, s->tokens);
return gccAsmSemantic(eas, sc);
#else
InlineAsmStatement *ias = new InlineAsmStatement(s->loc, s->tokens);
return inlineAsmSemantic(ias, sc);
#endif
}