Initial Commit, moving from dev-private and removing private stuff
diff --git a/helpers/llvm-arm-dis b/helpers/llvm-arm-dis
new file mode 100755
index 0000000..a0267bf
--- /dev/null
+++ b/helpers/llvm-arm-dis
@@ -0,0 +1,42 @@
+#!/usr/bin/env perl
+
+# This script uses llvm-mc to disassemble byte patterns into possible
+# x86/x86_64/arm/aarch64 instructions, trying to find a way to represent
+# that in any of the instruction sets.
+
+use strict;
+use warnings;
+use Data::Dumper;
+
+#vpush-vpop.s:@ CHECK-ARM: vpop {s8, s9, s10, s11, s12} @ encoding: [0x05,0x4a,0xbd,0xec]
+#vpush-vpop.s:@ CHECK-THUMB: vpush {d8, d9, d10, d11, d12} @ encoding: [0x2d,0xed,0x0a,0x8b]
+my $syntax = "Syntax: $0 0xFFFF(FFFF)\n";
+my @hexs = &fix_endian($ARGV[0]);
+#die Dumper \@hexs;
+
+foreach (@hexs) {
+ my $code = $_->{'code'};
+ my $arch = $_->{'arch'};
+ print "$arch: $code: ";
+ print `echo "$code" | llvm-mc -disassemble -triple $arch`;
+}
+
+sub fix_endian() {
+ my ($hex) = @_;
+
+ my ($a, $b, $c, $d) = ($hex =~ /^0?x?(\w{2})(\w{2})(\w{0,2})(\w{0,2})$/);
+ print "$a $b $c $d\n";
+ die $syntax unless $a and $b; # at least two bytes
+ die $syntax if $c and not $d; # two or four bytes
+ # ARM/T2/x86
+ if ($c) {
+ return (
+ { 'code' => "0x$d 0x$c 0x$b 0x$a", 'arch' => "armv7" },
+ { 'code' => "0x$b 0x$a 0x$d 0x$c", 'arch' => "thumbv7" },
+ { 'code' => "0x$d 0x$c 0x$b 0x$a", 'arch' => "i686" },
+ { 'code' => "0x$d 0x$c 0x$b 0x$a", 'arch' => "x86_64" }
+ );
+ } else {
+ return ( { 'code' => "0x$b 0x$a", 'arch' => "thumb" } );
+ }
+}