Skip to content

Commit 7191bcd

Browse files
committed
FIXME: Add unimplemented DMA instructions
* TODO: forward the instruction tag to the unimp log? * TODO: why do we need_env() for these? * TODO: filter out some attributes? These instructions are unimplemented for now, they are used by h2.
1 parent 644f973 commit 7191bcd

File tree

4 files changed

+54
-2
lines changed

4 files changed

+54
-2
lines changed

target/hexagon/hex_common.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -253,6 +253,7 @@ def is_hvx_insn(tag):
253253
def need_env(tag):
254254
return ("A_STORE" in attribdict[tag] or
255255
"A_LOAD" in attribdict[tag] or
256+
"A_DMA" in attribdict[tag] or
256257
"A_CVI_GATHER" in attribdict[tag] or
257258
"A_CVI_SCATTER" in attribdict[tag] or
258259
"A_IMPLICIT_WRITES_USR" in attribdict[tag] or

target/hexagon/imported/encode_pp.def

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -788,6 +788,17 @@ DEF_ENC32(Y6_diag, ICLASS_CR" 0010 010sssss PP------ 001-----")
788788
DEF_ENC32(Y6_diag0, ICLASS_CR" 0010 010sssss PP-ttttt 010-----")
789789
DEF_ENC32(Y6_diag1, ICLASS_CR" 0010 010sssss PP-ttttt 011-----")
790790

791+
DEF_ENC32(Y6_dmcfgrd,"10101000000sssssPP------101ddddd")
792+
DEF_ENC32(Y6_dmcfgwr,"10101000000sssssPP-ttttt110-----")
793+
DEF_ENC32(Y6_dmlink,"10100110000sssssPP-ttttt010-----")
794+
DEF_ENC32(Y6_dmpause,"10101000000-----PP------011ddddd")
795+
DEF_ENC32(Y6_dmpoll,"10101000000-----PP------010ddddd")
796+
DEF_ENC32(Y6_dmresume,"10100110000sssssPP------100-----")
797+
DEF_ENC32(Y6_dmstart,"10100110000sssssPP------001-----")
798+
DEF_ENC32(Y6_dmsyncht,"10101000000-----PP-----0111ddddd")
799+
DEF_ENC32(Y6_dmtlbsynch,"10101000000-----PP-----1111ddddd")
800+
DEF_ENC32(Y6_dmwait,"10101000000-----PP------001ddddd")
801+
791802
DEF_FIELDROW_DESC32( ICLASS_CR" 0011 -------- PP------ --------","[#3] Cdd=Rss ")
792803
DEF_ENC32(A4_tfrpcp, ICLASS_CR" 0011 001sssss PP------ ---ddddd")
793804
DEF_ENC32(G4_tfrgpcp, ICLASS_CR" 0011 000sssss PP------ ---ddddd")
@@ -2230,4 +2241,3 @@ DEF_ENC32(M4_mpyri_addr_u2, ICLASS_ALU64" 1111 0ii sssss PPiddddd iiiuuuuu")
22302241
DEF_ENC32(M4_mpyri_addr, ICLASS_ALU64" 1111 1ii sssss PPiddddd iiiuuuuu")
22312242

22322243

2233-

target/hexagon/imported/system.idef

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -256,6 +256,46 @@ Q6INSN(Y4_l2fetch,"l2fetch(Rs32,Rt32)",ATTRIBS(A_RESTRICT_SLOT0ONLY,A_RESTRICT_P
256256
0); /*extra attrib flags*/
257257
})
258258

259+
Q6INSN(Y6_dmstart,"dmstart(Rs32)",ATTRIBS(A_NOTE_NOPACKET,A_RESTRICT_NOPACKET,A_DMA,A_RESTRICT_SLOT0ONLY,A_SYNC_MARKER,A_NO_TIMING_LOG),"DMA Start", {
260+
fUNIMP();
261+
})
262+
263+
Q6INSN(Y6_dmlink,"dmlink(Rs32,Rt32)",ATTRIBS(A_NOTE_NOPACKET,A_RESTRICT_NOPACKET,A_DMA,A_RESTRICT_SLOT0ONLY,A_SYNC_MARKER,A_NO_TIMING_LOG),"DMA Link", {
264+
fUNIMP();
265+
})
266+
267+
Q6INSN(Y6_dmpoll,"Rd32=dmpoll",ATTRIBS(A_NOTE_NOPACKET,A_RESTRICT_NOPACKET,A_DMA,A_RESTRICT_SLOT0ONLY,A_NO_TIMING_LOG),"DMA Poll", {
268+
fUNIMP();
269+
})
270+
271+
Q6INSN(Y6_dmwait,"Rd32=dmwait",ATTRIBS(A_NOTE_NOPACKET,A_RESTRICT_NOPACKET,A_DMA,A_RESTRICT_SLOT0ONLY,A_NO_TIMING_LOG),"DMA Wait", {
272+
fUNIMP();
273+
})
274+
275+
Q6INSN(Y6_dmsyncht,"Rd32=dmsyncht",ATTRIBS(A_PRIV,A_NOTE_PRIV,A_NOTE_NOPACKET,A_RESTRICT_NOPACKET,A_DMA,A_RESTRICT_SLOT0ONLY,A_NO_TIMING_LOG),"DMA SynchT",{
276+
fUNIMP();
277+
})
278+
Q6INSN(Y6_dmtlbsynch,"Rd32=dmtlbsynch",ATTRIBS(A_PRIV,A_NOTE_PRIV,A_NOTE_NOPACKET,A_RESTRICT_NOPACKET,A_DMA,A_RESTRICT_SLOT0ONLY,A_NO_TIMING_LOG),"DMA TLB Synch",{
279+
fUNIMP();
280+
})
281+
282+
Q6INSN(Y6_dmcfgrd,"Rd32=dmcfgrd(Rs32)",ATTRIBS(A_PRIV,A_NOTE_PRIV,A_NOTE_NOPACKET,A_RESTRICT_NOPACKET,A_DMA,A_RESTRICT_SLOT0ONLY,A_NO_TIMING_LOG),
283+
"DMA Config Read", {
284+
fUNIMP();
285+
})
286+
287+
Q6INSN(Y6_dmcfgwr,"dmcfgwr(Rs32,Rt32)",ATTRIBS(A_NOTE_PRIV,A_PRIV,A_NOTE_NOPACKET,A_RESTRICT_NOPACKET,A_DMA,A_RESTRICT_SLOT0ONLY,A_NO_TIMING_LOG),
288+
"DMA Config Write", {
289+
fUNIMP();
290+
})
291+
292+
Q6INSN(Y6_dmpause,"Rd32=dmpause",ATTRIBS(A_NOTE_NOPACKET,A_RESTRICT_NOPACKET,A_DMA,A_RESTRICT_SLOT0ONLY,A_NO_TIMING_LOG),"DMA Pause",{
293+
fUNIMP();
294+
})
295+
296+
Q6INSN(Y6_dmresume,"dmresume(Rs32)",ATTRIBS(A_NOTE_NOPACKET,A_RESTRICT_NOPACKET,A_DMA,A_RESTRICT_SLOT0ONLY,A_SYNC_MARKER,A_NO_TIMING_LOG),"DMA Resume",{
297+
fUNIMP();
298+
})
259299

260300

261301
Q6INSN(Y5_l2fetch,"l2fetch(Rs32,Rtt32)",ATTRIBS(A_RESTRICT_SLOT0ONLY,A_RESTRICT_PACKET_AXOK,A_NOTE_AXOK),"L2 Cache Prefetch",
@@ -283,4 +323,3 @@ Q6INSN(Y5_l2gcleaninv,"l2gcleaninv",ATTRIBS(A_PRIV,A_NOTE_PRIV,A_NOTE_NOPACKET,A
283323
Q6INSN(Y6_l2gcleanpa,"l2gclean(Rtt32)",ATTRIBS(A_PRIV,A_NOTE_PRIV,A_NOTE_NOPACKET,A_RESTRICT_SLOT0ONLY,A_RESTRICT_NOPACKET,A_CACHEOP,A_L2FLUSHOP),"L2 Global Clean by PA Range",{fL2CLEANPA(RttV);})
284324

285325
Q6INSN(Y6_l2gcleaninvpa,"l2gcleaninv(Rtt32)",ATTRIBS(A_PRIV,A_NOTE_PRIV,A_NOTE_NOPACKET,A_RESTRICT_SLOT0ONLY,A_RESTRICT_NOPACKET,A_CACHEOP,A_L2FLUSHOP),"L2 Global Clean and Invalidate by PA Range",{fL2CLEANINVPA(RttV);})
286-

target/hexagon/macros.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -687,3 +687,5 @@ static inline TCGv gen_read_ireg(TCGv result, TCGv val, int shift)
687687
#endif
688688

689689
#define fPREDUSE_TIMING()
690+
691+
#define fUNIMP() qemu_log_mask(LOG_UNIMP, "Unimplemented instruction\n")

0 commit comments

Comments
 (0)