intel/tools: Print c_literals 4 byte wide
authorSagar Ghuge <sagar.ghuge@intel.com>
Fri, 7 Feb 2020 22:36:12 +0000 (14:36 -0800)
committerMarge Bot <eric+marge@anholt.net>
Tue, 25 Feb 2020 22:23:38 +0000 (22:23 +0000)
We already print hex value a byte wide, instead of printing c_literal
byte wide, we can print it 4 byte wide, which gives us 2 different
combinations.

v2: Fix the aliasing issue (Matt Turner)

Signed-off-by: Sagar Ghuge <sagar.ghuge@intel.com>
Reviewed-by: Matt Turner <mattst88@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/3952>

src/intel/tools/i965_asm.c

index 9479d6c2fbdb79e78fa185bb12667778f8146013..9fb0cdce0ccd6acecc5cff0382ac3ea7488940fb 100644 (file)
@@ -56,6 +56,14 @@ print_help(const char *progname, FILE *file)
            progname);
 }
 
+static uint32_t
+get_dword(const brw_inst *inst, int idx)
+{
+   uint32_t dword;
+   memcpy(&dword, (char *)inst + 4 * idx, sizeof(dword));
+   return dword;
+}
+
 static void
 print_instruction(FILE *output, bool compact, const brw_inst *instruction)
 {
@@ -73,11 +81,11 @@ print_instruction(FILE *output, bool compact, const brw_inst *instruction)
       break;
    }
    case OPT_OUTPUT_C_LITERAL: {
-      fprintf(output, "\t0x%02x,", ((unsigned char *)instruction)[0]);
+      fprintf(output, "\t0x%08x,", get_dword(instruction, 0));
+
+      for (unsigned i = 1; i < byte_limit / 4; i++)
+         fprintf(output, " 0x%08x,", get_dword(instruction, i));
 
-      for (unsigned i = 1; i < byte_limit; i++) {
-         fprintf(output, " 0x%02x,", ((unsigned char *)instruction)[i]);
-      }
       break;
    }
    case OPT_OUTPUT_BIN: