Blackfin: adjust asm constraints with NMI workaround
Newer gcc versions will sometimes use a Preg when "r" constraints, but that'll fail if we use an Ireg in the assignment. So force the code to always use a Dreg. This also fixes early boot crashes for older Blackfin parts when compiled with gcc-4.5. This version ends up selecting the same register for the input and output variables which corrupts the output assignment triggering an exception. P2 = 0xffe02008; /* EVT2 */ R0 = RETS; CALL 1f; RTN; 1: P2 = RETS; <-- BAD RETS = R0; [P2] = P2; <-- BAD Signed-off-by: Mike Frysinger <vapier@gentoo.org> Signed-off-by: Sonic Zhang <sonic.zhang@analog.com>
This commit is contained in:
parent
e0ae433e92
commit
2e2ed3f4ff
1 changed files with 2 additions and 1 deletions
|
@ -262,7 +262,8 @@ program_nmi_handler(void)
|
|||
"%1 = RETS;" /* Load addr of NMI handler */
|
||||
"RETS = %0;" /* Restore RETS */
|
||||
"[%2] = %1;" /* Write NMI handler */
|
||||
: "=r"(tmp1), "=r"(tmp2) : "ab"(EVT2)
|
||||
: "=d"(tmp1), "=d"(tmp2)
|
||||
: "ab"(EVT2)
|
||||
);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue