Skip to content

Commit 7eda566

Browse files
CyberShadowdlang-bot
authored andcommitted
spec/iasm.dd: Add the GDC inline assembler grammar
The root definition (GccAsmStatement) is purposefully not referred to anywhere from the rest of the grammar. This allows implementations (grammar consumers) to opt-in by replacing or augmenting AsmStatement with GccAsmStatement as appropriate.
1 parent d9bf60f commit 7eda566

File tree

1 file changed

+44
-0
lines changed

1 file changed

+44
-0
lines changed

spec/iasm.dd

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1239,6 +1239,50 @@ $(H3 $(LNAME2 simd, SIMD))
12391239

12401240
$(P SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2 and AVX are supported.)
12411241

1242+
$(H2 $(LNAME2 gcc, GCC syntax))
1243+
1244+
$(P The $(LINK2 https://gdcproject.org/, GNU D Compiler) uses an alternative, GCC-based syntax for inline assembler:)
1245+
1246+
$(GRAMMAR
1247+
$(GNAME GccAsmStatement):
1248+
$(D asm) $(GLINK2 function, FunctionAttributes)$(OPT) $(D {) $(GLINK GccAsmInstructionList) $(D })
1249+
1250+
$(GNAME GccAsmInstructionList):
1251+
$(GLINK GccAsmInstruction) $(D ;)
1252+
$(GLINK GccAsmInstruction) $(D ;) $(GSELF GccAsmInstructionList)
1253+
1254+
$(GNAME GccAsmInstruction):
1255+
$(GLINK GccBasicAsmInstruction)
1256+
$(GLINK GccExtAsmInstruction)
1257+
$(GLINK GccGotoAsmInstruction)
1258+
1259+
$(GNAME GccBasicAsmInstruction):
1260+
$(GLINK2 expression, AssignExpression)
1261+
1262+
$(GNAME GccExtAsmInstruction):
1263+
$(GLINK2 expression, AssignExpression) $(D :) $(GLINK GccAsmOperands)$(OPT)
1264+
$(GLINK2 expression, AssignExpression) $(D :) $(GLINK GccAsmOperands)$(OPT) $(D :) $(GLINK GccAsmOperands)$(OPT)
1265+
$(GLINK2 expression, AssignExpression) $(D :) $(GLINK GccAsmOperands)$(OPT) $(D :) $(GLINK GccAsmOperands)$(OPT) $(D :) $(GLINK GccAsmClobbers)$(OPT)
1266+
1267+
$(GNAME GccGotoAsmInstruction):
1268+
$(GLINK2 expression, AssignExpression) $(D :) $(D :) $(GLINK GccAsmOperands)$(OPT) $(D :) $(GLINK GccAsmClobbers)$(OPT) $(D :) $(GLINK GccAsmGotoLabels)$(OPT)
1269+
1270+
$(GNAME GccAsmOperands):
1271+
$(GLINK GccSymbolicName)$(OPT) $(GLINK_LEX StringLiteral) $(D $(LPAREN)) $(GLINK2 expression, AssignExpression) $(D $(RPAREN))
1272+
$(GLINK GccSymbolicName)$(OPT) $(GLINK_LEX StringLiteral) $(D $(LPAREN)) $(GLINK2 expression, AssignExpression) $(D $(RPAREN)) $(D ,) $(GSELF GccAsmOperands)
1273+
1274+
$(GNAME GccSymbolicName):
1275+
$(D [) $(GLINK_LEX Identifier) $(D ])
1276+
1277+
$(GNAME GccAsmClobbers):
1278+
$(GLINK_LEX StringLiteral)
1279+
$(GLINK_LEX StringLiteral) $(D ,) $(GSELF GccAsmClobbers)
1280+
1281+
$(GNAME GccAsmGotoLabels):
1282+
$(GLINK_LEX Identifier)
1283+
$(GLINK_LEX Identifier) $(D ,) $(GSELF GccAsmGotoLabels)
1284+
)
1285+
12421286
$(COMMENT
12431287
$(H3 $(LNAME2 other, Other))
12441288
$(P AES, CMUL, FSGSBASE, RDRAND, FP16C and FMA are supported.)

0 commit comments

Comments
 (0)