diff --git a/Misc/decgen/encodings/ARMv7 b/Misc/decgen/encodings/ARMv7
index 0b7f4d3a16f0be391911fb372964d6429dcdc4c4..a2cf233cca78bd4027e2cf2c67a3aa6746a42d28 100644
--- a/Misc/decgen/encodings/ARMv7
+++ b/Misc/decgen/encodings/ARMv7
@@ -15,14 +15,12 @@
 (cond:4)0001(op:4)(:12)1001(:4)	{ne(cond,15)} {lt(op,8)} {band(op,3)}	UNDEFINED
 
 # A5.2.11
-(cond:4)00110(op)10(op1:4)(:8)(op2:8)	{ne(cond,15)} {lnot(op)} {lnot(op1)} {gt(op2,4)} {lt(op2,0xf0)}	UNALLOCATED_HINT
+(cond:4)00110(op)10(op1:4)(:8)(op2:8)	{ne(cond,15)} {lnot(op)} {lnot(op1)} {gt(op2,5)} {lt(op2,0xf0)}	UNALLOCATED_HINT
 
 # A5.2.12
 (cond:4)00010(op:2)0(op1:4)(:8)0(op2:3)(:4)	{ne(cond,15)} {eq(op2,1)} {lnot(band(op,1))}	UNDEFINED
 (cond:4)00010(op:2)0(op1:4)(:8)0(op2:3)(:4)	{ne(cond,15)} {eq(band(op2,6),2)} {ne(op,1)}	UNDEFINED
-(cond:4)00010(op:2)0(op1:4)(:8)0(op2:3)(:4)	{ne(cond,15)} {eq(op2,4)}	UNDEFINED
 (cond:4)00010(op:2)0(op1:4)(:8)0(op2:3)(:4)	{ne(cond,15)} {eq(op2,6)} {ne(op,3)}	UNDEFINED
-(cond:4)00010(op:2)0(op1:4)(:8)0(op2:3)(:4)	{ne(cond,15)} {eq(op2,7)} {lnot(op)}	UNDEFINED
 
 # A5.4
 (cond:4)011(op1:5)(:4)(Rd:4)(:4)(op2:3)1(Rn:4)	{lt(cond,14)} {eq(op1,31)} {eq(op2,7)}	PERMA_UNDEFINED
@@ -328,20 +326,10 @@
 (cond:4)000PU0W0(Rn:4)(Rt:4)(0000)1101(Rm:4)	{ne(cond,15)} {lor(opcode<24>,lnot(opcode<21>))}	LDRD_reg_A1 # Note manual disambiguation (see A5.2)
 
 # A8.8.75 LDREX
-# A1 ARMv6*, ARMv7
-(cond:4)00011001(Rn:4)(Rt:4)(1111)1001(1111)	{ne(cond,15)}	LDREX_A1
-
 # A8.8.76 LDREXB
-# A1 ARMv6K, ARMv7
-(cond:4)00011101(Rn:4)(Rt:4)(1111)1001(1111)	{ne(cond,15)}	LDREXB_A1
-
 # A8.8.77 LDREXD
-# A1 ARMv6K, ARMv7
-(cond:4)00011011(Rn:4)(Rt:4)(1111)1001(1111)	{ne(cond,15)}	LDREXD_A1
-
 # A8.8.78 LDREXH
-# A1 ARMv6K, ARMv7
-(cond:4)00011111(Rn:4)(Rt:4)(1111)1001(1111)	{ne(cond,15)}	LDREXH_A1
+# See ARMv8/nARMv8 for the differing encodings of these instructions
 
 # A8.8.80 LDRH (immediate, ARM)
 # A1 ARMv4*, ARMv5T*, ARMv6*, ARMv7
@@ -848,20 +836,10 @@
 (cond:4)000PU0W0(Rn:4)(Rt:4)(0000)1111(Rm:4)	{ne(cond,15)} {lor(opcode<24>,lnot(opcode<21>))}	STRD_reg_A1 # Note manual disambiguation (see A5.2)
 
 # A8.8.212 STREX
-# A1 ARMv6*, ARMv7
-(cond:4)00011000(Rn:4)(Rd:4)(1111)1001(Rt:4)	{ne(cond,15)}	STREX_A1
-
 # A8.8.213 STREXB
-# A1 ARMv6K, ARMv7
-(cond:4)00011100(Rn:4)(Rd:4)(1111)1001(Rt:4)	{ne(cond,15)}	STREXB_A1
-
 # A8.8.214 STREXD
-# A1 ARMv6K, ARMv7
-(cond:4)00011010(Rn:4)(Rd:4)(1111)1001(Rt:4)	{ne(cond,15)}	STREXD_A1
-
 # A8.8.215 STREXH
-# A1 ARMv6K, ARMv7
-(cond:4)00011110(Rn:4)(Rd:4)(1111)1001(Rt:4)	{ne(cond,15)}	STREXH_A1
+# See ARMv8/nARMv8 for the differing encodings of these instructions
 
 # A8.8.217 STRH (immediate, ARM)
 # A1 ARMv4*, ARMv5T*, ARMv6*, ARMv7
diff --git a/Misc/decgen/encodings/ARMv8_AArch32 b/Misc/decgen/encodings/ARMv8_AArch32
new file mode 100644
index 0000000000000000000000000000000000000000..40271bde65a9a13c793b0047bcf3d2e36f57afe4
--- /dev/null
+++ b/Misc/decgen/encodings/ARMv8_AArch32
@@ -0,0 +1,80 @@
+# From DDI 0487A.g section J5
+# Can be overlaid directly on top of the ARMv7 encodings
+
+# F6.1.54 Load-Aquire
+(cond:4)00011(sz:2)1(Rn:4)(Rt:4)(11)001001(1111)	{ne(cond,15)} {ne(sz,1)}	LDA_A1
+
+# F6.1.210 Store-Release
+(cond:4)00011(sz:2)0(Rn:4)(1111)(11)001001(Rt:4)	{ne(cond,15)} {ne(sz,1)}	STL_A1
+
+# F6.1.56 Load-Aquire Exclusive
+(cond:4)00011001(Rn:4)(Rt:4)(11)101001(1111)	{ne(cond,15)}	LDAEX_A1
+(cond:4)00011011(Rn:4)(Rt:4)(11)101001(1111)	{ne(cond,15)}	LDAEXD_A1
+(cond:4)00011101(Rn:4)(Rt:4)(11)101001(1111)	{ne(cond,15)}	LDAEXB_A1
+(cond:4)00011111(Rn:4)(Rt:4)(11)101001(1111)	{ne(cond,15)}	LDAEXH_A1
+
+# F6.1.212 Store-Release Exclusive
+(cond:4)00011000(Rn:4)(Rd:4)(11)101001(Rt:4)	{ne(cond,15)}	STLEX_A1
+(cond:4)00011010(Rn:4)(Rd:4)(11)101001(Rt:4)	{ne(cond,15)}	STLEXD_A1
+(cond:4)00011100(Rn:4)(Rd:4)(11)101001(Rt:4)	{ne(cond,15)}	STLEXB_A1
+(cond:4)00011110(Rn:4)(Rd:4)(11)101001(Rt:4)	{ne(cond,15)}	STLEXH_A1
+
+# Table J5.7.1 External Debug
+# DCPS1/2/3 has no A32 encoding
+
+# F6.1.50 Halting breakpoint
+(cond:4)00010(op:2)0(imm12:12)0(op2:3)(imm4:4)	{ne(cond,15)} {eq(op2,7)} {lnot(op)}	HLT_A1
+
+# Table J5.7.2 Barriers and hints
+# DMB OSHLD/NSHLD/ISHLD/LD see F6.1.44, same encoding as ARMv7
+# DSB OSHLD/NSHLD/ISHLD/LD see F6.1.45, same encoding as ARMv7
+
+# F6.1.179 Send event local
+(cond:4)001100100000(11110000)00000101	{ne(cond,15)}	SEVL_A1
+
+# Table J5.7.3 TLB maintenance
+# Accessed using MCR operations, so no new opcodes
+
+# F6.1.40 CRC
+(cond:4)00010(sz:2)0(Rn:4)(Rd:4)(0)(0)C(0)0(op2:3)(Rm:4)	{ne(cond,15)} {eq(op2,4)}	CRC_A1
+
+# Note that [LDR|STR]EX[B|H|D] appear here because previously
+# bits 8-11 SBO, but that recommendation has changed because
+# ARMv8 has added [LDA|STL]EX[B|H|D] in the same instruction space.
+
+# F4.2.10
+(cond:4)0001(op:4)(:8)(11)(op1:2)1001(:4)	{ne(cond,15)} {lor(eq(op,8),eq(op,9))} {eq(op1,1)}	UNDEFINED
+(cond:4)0001(op:4)(:8)(11)(op1:2)1001(:4)	{ne(cond,15)} {lor(eq(op,10),eq(op,11))} {lnot(band(op1,2))}	UNDEFINED
+(cond:4)0001(op:4)(:8)(11)(op1:2)1001(:4)	{ne(cond,15)} {ge(op,12)} {eq(op1,1)}	UNDEFINED
+
+# F6.1.229 STREX
+# A1 ARMv6*, ARMv7
+(cond:4)00011000(Rn:4)(Rd:4)(11)111001(Rt:4)	{ne(cond,15)}	STREX_A1
+
+# F6.1.230 STREXB
+# A1 ARMv6K, ARMv7
+(cond:4)00011100(Rn:4)(Rd:4)(11)111001(Rt:4)	{ne(cond,15)}	STREXB_A1
+
+# F6.1.231 STREXD
+# A1 ARMv6K, ARMv7
+(cond:4)00011010(Rn:4)(Rd:4)(11)111001(Rt:4)	{ne(cond,15)}	STREXD_A1
+
+# F6.1.232 STREXH
+# A1 ARMv6K, ARMv7
+(cond:4)00011110(Rn:4)(Rd:4)(11)111001(Rt:4)	{ne(cond,15)}	STREXH_A1
+
+# F6.1.79 LDREX
+# A1 ARMv6*, ARMv7
+(cond:4)00011001(Rn:4)(Rt:4)(11)111001(1111)	{ne(cond,15)}	LDREX_A1
+
+# F6.1.80 LDREXB
+# A1 ARMv6K, ARMv7
+(cond:4)00011101(Rn:4)(Rt:4)(11)111001(1111)	{ne(cond,15)}	LDREXB_A1
+
+# F6.1.81 LDREXD
+# A1 ARMv6K, ARMv7
+(cond:4)00011011(Rn:4)(Rt:4)(11)111001(1111)	{ne(cond,15)}	LDREXD_A1
+
+# F6.1.82 LDREXH
+# A1 ARMv6K, ARMv7
+(cond:4)00011111(Rn:4)(Rt:4)(11)111001(1111)	{ne(cond,15)}	LDREXH_A1
diff --git a/Misc/decgen/encodings/ARMv8_nAArch32 b/Misc/decgen/encodings/ARMv8_nAArch32
new file mode 100644
index 0000000000000000000000000000000000000000..6357731f32722cd963165ac55ffc576a0c3c9ec0
--- /dev/null
+++ b/Misc/decgen/encodings/ARMv8_nAArch32
@@ -0,0 +1,53 @@
+# From DDI 0487A.g section J5
+# Overlay this with ARMv7 encodings to fill the holes where ARMv8 additions are
+
+# F6.1.54 Load-Aquire
+# F6.1.210 Store-Release
+# F6.1.56 Load-Aquire Exclusive
+# F6.1.212 Store-Release Exclusive
+# These alias into the LDREX/STREX family (see below)
+
+# F6.1.50 Halting breakpoint
+(cond:4)00010(op:2)0(op1:4)(:8)0(op2:3)(:4)	{ne(cond,15)} {eq(op2,7)} {lnot(op)}	UNDEFINED
+
+# F6.1.179 Send event local
+(cond:4)001100100000(11110000)00000101	{ne(cond,15)}	UNALLOCATED_MEM_HINT
+
+# F6.1.40 CRC
+(cond:4)00010(op:2)0(op1:4)(:8)0(op2:3)(:4)	{ne(cond,15)} {eq(op2,4)}	UNDEFINED
+
+# Note that [LDR|STR]EX[B|H|D] appear here because previously
+# bits 8-11 SBO, but that recommendation has changed because
+# ARMv8 has added [LDA|STL]EX[B|H|D] in the same instruction space.
+
+# A8.8.212 in DDI 0406C STREX
+# A1 ARMv6*, ARMv7
+(cond:4)00011000(Rn:4)(Rd:4)(1111)1001(Rt:4)	{ne(cond,15)}	STREX_A1
+
+# A8.8.213 in DDI 0406C STREXB
+# A1 ARMv6K, ARMv7
+(cond:4)00011100(Rn:4)(Rd:4)(1111)1001(Rt:4)	{ne(cond,15)}	STREXB_A1
+
+# A8.8.214 in DDI 0406C STREXD
+# A1 ARMv6K, ARMv7
+(cond:4)00011010(Rn:4)(Rd:4)(1111)1001(Rt:4)	{ne(cond,15)}	STREXD_A1
+
+# A8.8.215 in DDI 0406C STREXH
+# A1 ARMv6K, ARMv7
+(cond:4)00011110(Rn:4)(Rd:4)(1111)1001(Rt:4)	{ne(cond,15)}	STREXH_A1
+
+# A8.8.75 in DDI 0406C LDREX
+# A1 ARMv6*, ARMv7
+(cond:4)00011001(Rn:4)(Rt:4)(1111)1001(1111)	{ne(cond,15)}	LDREX_A1
+
+# A8.8.76 in DDI 0406C LDREXB
+# A1 ARMv6K, ARMv7
+(cond:4)00011101(Rn:4)(Rt:4)(1111)1001(1111)	{ne(cond,15)}	LDREXB_A1
+
+# A8.8.77 in DDI 0406C LDREXD
+# A1 ARMv6K, ARMv7
+(cond:4)00011011(Rn:4)(Rt:4)(1111)1001(1111)	{ne(cond,15)}	LDREXD_A1
+
+# A8.8.78 in DDI 0406C LDREXH
+# A1 ARMv6K, ARMv7
+(cond:4)00011111(Rn:4)(Rt:4)(1111)1001(1111)	{ne(cond,15)}	LDREXH_A1
diff --git a/VersionNum b/VersionNum
index c877dcca61af58cd0f4aae8f5b96241be9b427ab..93bf89a7ae20b967e523483d937266044bffece8 100644
--- a/VersionNum
+++ b/VersionNum
@@ -1,23 +1,23 @@
-/* (1.87)
+/* (1.88)
  *
  * This file is automatically maintained by srccommit, do not edit manually.
  * Last processed by srccommit version: 1.1.
  *
  */
-#define Module_MajorVersion_CMHG        1.87
+#define Module_MajorVersion_CMHG        1.88
 #define Module_MinorVersion_CMHG        
-#define Module_Date_CMHG                28 May 2016
+#define Module_Date_CMHG                11 Nov 2016
 
-#define Module_MajorVersion             "1.87"
-#define Module_Version                  187
+#define Module_MajorVersion             "1.88"
+#define Module_Version                  188
 #define Module_MinorVersion             ""
-#define Module_Date                     "28 May 2016"
+#define Module_Date                     "11 Nov 2016"
 
-#define Module_ApplicationDate          "28-May-16"
+#define Module_ApplicationDate          "11-Nov-16"
 
 #define Module_ComponentName            "Library"
 #define Module_ComponentPath            "mixed/RiscOS/Library"
 
-#define Module_FullVersion              "1.87"
-#define Module_HelpVersion              "1.87 (28 May 2016)"
-#define Module_LibraryVersionInfo       "1:87"
+#define Module_FullVersion              "1.88"
+#define Module_HelpVersion              "1.88 (11 Nov 2016)"
+#define Module_LibraryVersionInfo       "1:88"