v5: add disassembler support for JDNS{Q|A}MATCHSAFE_EXT_OPCODE

Test: TH
Change-Id: Idff7ce13716c2bd23c6d195e8e68771cd1cbb84b
diff --git a/disassembler.c b/disassembler.c
index 3a70f82..65b90d1 100644
--- a/disassembler.c
+++ b/disassembler.c
@@ -302,15 +302,27 @@
 
                     break;
                 }
-                case JDNSQMATCH_EXT_OPCODE:
-                case JDNSAMATCH_EXT_OPCODE: {
+                case JDNSQMATCH_EXT_OPCODE:       // 43
+                case JDNSAMATCH_EXT_OPCODE:       // 44
+                case JDNSQMATCHSAFE_EXT_OPCODE:   // 45
+                case JDNSAMATCHSAFE_EXT_OPCODE: { // 46
                     uint32_t offs = DECODE_IMM(1 << (len_field - 1));
-                    uint16_t qtype;
-                    if (imm == JDNSQMATCH_EXT_OPCODE) {
-                        print_opcode(reg_num ? "jdnsqeq" : "jdnsqne");
-                        qtype = DECODE_IMM(1);
-                    } else {
-                        print_opcode(reg_num ? "jdnsaeq" : "jdnsane");
+                    int qtype = -1;
+                    switch(imm) {
+                        case JDNSQMATCH_EXT_OPCODE:
+                            print_opcode(reg_num ? "jdnsqeq" : "jdnsqne");
+                            qtype = DECODE_IMM(1);
+                            break;
+                        case JDNSQMATCHSAFE_EXT_OPCODE:
+                            print_opcode(reg_num ? "jdnsqeqsafe" : "jdnsqnesafe");
+                            qtype = DECODE_IMM(1);
+                            break;
+                        case JDNSAMATCH_EXT_OPCODE:
+                            print_opcode(reg_num ? "jdnsaeq" : "jdnsane"); break;
+                        case JDNSAMATCHSAFE_EXT_OPCODE:
+                            print_opcode(reg_num ? "jdnsaeqsafe" : "jdnsanesafe"); break;
+                        default:
+                            bprintf("unknown_ext %u", imm); break;
                     }
                     bprintf("r0, ");
                     uint32_t end = *ptr2pc;
@@ -320,7 +332,7 @@
                     end += 2;
                     print_jump_target(end + offs, program_len);
                     bprintf(", ");
-                    if (imm == JDNSQMATCH_EXT_OPCODE) {
+                    if (imm == JDNSQMATCH_EXT_OPCODE || imm == JDNSQMATCHSAFE_EXT_OPCODE) {
                         bprintf("%d, ", qtype);
                     }
                     while (*ptr2pc < end) {