Add an instruction_set property to Arch

Used to allow switching between thumb and arm ISAs

Change-Id: I94aa83cee7179e83c97eedc32fd216965b626d33
diff --git a/cc/arm_device.go b/cc/arm_device.go
index e33bd01..8cd33e3 100644
--- a/cc/arm_device.go
+++ b/cc/arm_device.go
@@ -149,7 +149,7 @@
 
 	// Extended cflags
 
-	// ARM mode vs. Thumb mode
+	// ARM vs. Thumb instruction set flags
 	pctx.StaticVariable("armArmCflags", strings.Join(armArmCflags, " "))
 	pctx.StaticVariable("armThumbCflags", strings.Join(armThumbCflags, " "))
 
@@ -256,6 +256,17 @@
 	return "${armIncludeFlags}"
 }
 
+func (t *toolchainArm) InstructionSetFlags(isa string) (string, error) {
+	switch isa {
+	case "arm":
+		return "${armArmCflags}", nil
+	case "thumb", "":
+		return "${armThumbCflags}", nil
+	default:
+		return t.toolchainBase.InstructionSetFlags(isa)
+	}
+}
+
 func (t *toolchainArm) ClangTriple() string {
 	return "${armGccTriple}"
 }
@@ -277,7 +288,6 @@
 		cflags: strings.Join([]string{
 			"${armCflags}",
 			"${armIncludeFlags}",
-			"${armThumbCflags}",
 			armArchVariantCflagsVar[archVariant],
 			armCpuVariantCflagsVar[cpuVariant],
 		}, " "),
@@ -288,7 +298,6 @@
 		clangCflags: strings.Join([]string{
 			"${armClangCflags}",
 			"${armIncludeFlags}",
-			"${armThumbCflags}",
 			armClangArchVariantCflagsVar[archVariant],
 			armClangCpuVariantCflagsVar[cpuVariant],
 		}, " "),