Skip to content
This repository was archived by the owner on Sep 2, 2018. It is now read-only.
This repository was archived by the owner on Sep 2, 2018. It is now read-only.

Support "z" output constraint #21

Closed
@4ntoine

Description

@4ntoine
/Applications/A.app/Contents/Resources/Java/hardware/a/cores/a/wiring_digital.c:176:7: error: 
      invalid output constraint '=z' in asm
        if (*portInputRegister(port) & bit) return HIGH;
             ^
/Applications/A.app/Contents/Resources/Java/hardware/a/cores/a/A.h:146:54: note: expanded
      from macro 'portInputRegister'
#define portInputRegister(P) ( (volatile uint8_t *)( pgm_read_word( port_to_input_PGM + (P))) )
                                                     ^
/Applications/A.app/Contents/Resources/Java/hardware/tools/avr/avr/include/avr/pgmspace.h:705:41: note: 
      expanded from macro 'pgm_read_word'
#define pgm_read_word(address_short)    pgm_read_word_near(address_short)
                                        ^
/Applications/A.app/Contents/Resources/Java/hardware/tools/avr/avr/include/avr/pgmspace.h:418:43: note: 
      expanded from macro 'pgm_read_word_near'
#define pgm_read_word_near(address_short) __LPM_word((uint16_t)(address_short))
                                          ^
/Applications/A.app/Contents/Resources/Java/hardware/tools/avr/avr/include/avr/pgmspace.h:399:29: note: 
      expanded from macro '__LPM_word'
#define __LPM_word(addr)    __LPM_word_classic__(addr)
                            ^
/Applications/A.app/Contents/Resources/Java/hardware/tools/avr/avr/include/avr/pgmspace.h:291:28: note: 
      expanded from macro '__LPM_word_classic__'
        : "=r" (__result), "=z" (__addr16)  \
                           ^

code:

#define __LPM_word_classic__(addr)          \
(__extension__({                            \
    uint16_t __addr16 = (uint16_t)(addr);   \
    uint16_t __result;                      \
    __asm__                                 \
    (                                       \
        "lpm"           "\n\t"              \
        "mov %A0, r0"   "\n\t"              \
        "adiw r30, 1"   "\n\t"              \
        "lpm"           "\n\t"              \
        "mov %B0, r0"   "\n\t"              \
        : "=r" (__result), "=z" (__addr16)  \
        : "1" (__addr16)                    \
        : "r0"                              \
    );                                      \
    __result;                               \
}))

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions