我需要加載18h並將其輸出到端口60h,以下工作(內部asm(「」))。GCC內聯彙編:讓編譯器決定使用什麼寄存器來臨時值
ldi r1, 0x18 ; 0x18 -> r1
sts 0x60, r1 ; output r1 -> 0x60
我不在乎註冊r1或任何其他用於此。有沒有簡單的方法讓編譯器決定使用哪個寄存器?
我可以使用外部R/W的變量,但它產生了一些不必要的開銷:
register uint8_t tmp;
asm volatile (
"ldi %[tmp], 0x18 \n\t"
"sts 0x60, %[tmp]"
: [tmp] "=r"(tmp) :);
這是AVR ATMEGA(8位)處理器。使用GCC 4.3.2
它創建了多少開銷? – osgx
'mov,'不得不創建一個tmp變量,然後在輸入塊中描述它也是開銷。 –
你可以嘗試更新的gcc和更高的-O3級別嗎? – osgx