@@ -1858,12 +1858,22 @@ pru_print_operand (FILE *file, rtx op, int letter)
fprintf (file, HOST_WIDE_INT_PRINT_DEC, INTVAL (op) & 0xff);
return;
}
+ else if (letter == 'c')
+ {
+ fprintf (file, HOST_WIDE_INT_PRINT_DEC, INTVAL (op));
+ return;
+ }
+ else if (letter == 'n')
+ {
+ fprintf (file, HOST_WIDE_INT_PRINT_DEC, -INTVAL (op));
+ return;
+ }
/* Else, fall through. */
case CONST:
case LABEL_REF:
case SYMBOL_REF:
- if (letter == 0)
+ if (letter == 0 || letter == 'c')
{
output_addr_const (file, op);
return;
new file mode 100644
@@ -0,0 +1,32 @@
+/* Test ASM operand modifiers. */
+
+/* { dg-do compile } */
+/* { dg-options "-O1" } */
+
+struct S {
+ char b;
+ int a;
+ short c;
+};
+
+void
+test_const_int (void)
+{
+ /* { dg-final { scan-assembler "# printing 7 and -5" } } */
+ asm volatile ("# printing %c0 and %n1"
+ : :
+ "i" (sizeof(struct S)),
+ "i" (__builtin_offsetof (struct S, c)));
+}
+
+extern int g;
+
+void
+test_sym (void)
+{
+ /* { dg-final { scan-assembler "# outputting g and test_sym" } } */
+ asm volatile ("# outputting %c0 and %c1"
+ : :
+ "i" (&g),
+ "i" (&test_sym));
+}
Fix c-c++-common/toplevel-asm-1.c failure for PRU backend, caused by missing implementation of the "c" asm operand modifier. Pushed to trunk. gcc/ChangeLog: * config/pru/pru.cc (pru_print_operand): Implement c and n inline assembly operand modifiers. gcc/testsuite/ChangeLog: * gcc.target/pru/asm-op-modifier.c: New test. Signed-off-by: Dimitar Dimitrov <dimitar@dinux.eu> --- gcc/config/pru/pru.cc | 12 ++++++- .../gcc.target/pru/asm-op-modifier.c | 32 +++++++++++++++++++ 2 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.target/pru/asm-op-modifier.c