freedreno/afuc: Add iret

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6368>
This commit is contained in:
Connor Abbott
2020-08-17 20:29:20 +02:00
committed by Marge Bot
parent a2c14ac070
commit b2b19234d8
5 changed files with 17 additions and 2 deletions
+5
View File
@@ -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;
+4
View File
@@ -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);
+5 -2
View File
@@ -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);
+1
View File
@@ -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);
+2
View File
@@ -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); }