mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-29 08:00:12 +01:00
freedreno/afuc: Add iret
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6368>
This commit is contained in:
parent
a2c14ac070
commit
b2b19234d8
5 changed files with 17 additions and 2 deletions
|
|
@ -152,6 +152,11 @@ typedef union PACKED {
|
|||
uint32_t uoff : 26; /* absolute (unsigned) offset */
|
||||
uint32_t hdr : 6;
|
||||
} call;
|
||||
struct PACKED {
|
||||
uint32_t pad : 25;
|
||||
uint32_t interrupt : 1; /* return from ctxt-switch interrupt handler */
|
||||
uint32_t hdr : 6;
|
||||
} ret;
|
||||
struct PACKED {
|
||||
uint32_t pad : 26;
|
||||
uint32_t hdr : 6;
|
||||
|
|
|
|||
|
|
@ -254,6 +254,10 @@ static void emit_instructions(int outfd)
|
|||
case T_OP_RET:
|
||||
opc = OPC_RET;
|
||||
break;
|
||||
case T_OP_IRET:
|
||||
opc = OPC_RET;
|
||||
instr.ret.interrupt = 1;
|
||||
break;
|
||||
case T_OP_CALL:
|
||||
opc = OPC_CALL;
|
||||
instr.call.uoff = resolve_label(ai->label);
|
||||
|
|
|
|||
|
|
@ -656,9 +656,12 @@ static void disasm(uint32_t *buf, int sizedwords)
|
|||
break;
|
||||
case OPC_RET:
|
||||
assert(!rep);
|
||||
if (instr->pad)
|
||||
if (instr->ret.pad)
|
||||
printf("[%08x] ; ", instrs[i]);
|
||||
printf("ret");
|
||||
if (instr->ret.interrupt)
|
||||
printf("iret");
|
||||
else
|
||||
printf("ret");
|
||||
break;
|
||||
case OPC_WIN:
|
||||
assert(!rep);
|
||||
|
|
|
|||
|
|
@ -78,6 +78,7 @@ extern YYSTYPE yylval;
|
|||
"brne" return TOKEN(T_OP_BRNE);
|
||||
"breq" return TOKEN(T_OP_BREQ);
|
||||
"ret" return TOKEN(T_OP_RET);
|
||||
"iret" return TOKEN(T_OP_IRET);
|
||||
"call" return TOKEN(T_OP_CALL);
|
||||
"jump" return TOKEN(T_OP_JUMP);
|
||||
"waitin" return TOKEN(T_OP_WAITIN);
|
||||
|
|
|
|||
|
|
@ -153,6 +153,7 @@ label(const char *str)
|
|||
%token <tok> T_OP_BRNE
|
||||
%token <tok> T_OP_BREQ
|
||||
%token <tok> T_OP_RET
|
||||
%token <tok> T_OP_IRET
|
||||
%token <tok> T_OP_CALL
|
||||
%token <tok> T_OP_JUMP
|
||||
%token <tok> T_OP_WAITIN
|
||||
|
|
@ -248,6 +249,7 @@ other_instr: T_OP_CALL T_LABEL_REF { new_instr($1); label($2); }
|
|||
| T_OP_PREEMPTLEAVE T_LABEL_REF { new_instr($1); label($2); }
|
||||
| T_OP_SETSECURE reg ',' T_LABEL_REF { new_instr($1); src1($2); label($4); }
|
||||
| T_OP_RET { new_instr($1); }
|
||||
| T_OP_IRET { new_instr($1); }
|
||||
| T_OP_JUMP T_LABEL_REF { new_instr($1); label($2); }
|
||||
| T_OP_WAITIN { new_instr($1); }
|
||||
| T_OP_NOP { new_instr($1); }
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue