<div dir="ltr"><div>From 39f1c593c389a4eda649df0bcb62fa17d86ef018 Mon Sep 17 00:00:00 2001<br></div><div>From: Stephen Hines <<a href="mailto:srhines@google.com">srhines@google.com</a>></div><div>Date: Thu, 17 Jul 2014 00:48:53 -0700</div>
<div>Subject: [PATCH] Revert Thumb-2 conversion of ARM builtins.</div><div><br></div><div>The umodsi3 code computes jump targets based on ARM encodings (if CLZ is</div><div>present and IDIV is not present).</div><div><br>
</div><div>Reverts r211032 and r211035.</div><div>---</div><div> lib/builtins/arm/bswapdi2.S   |  3 ---</div><div> lib/builtins/arm/bswapsi2.S   |  3 ---</div><div> lib/builtins/arm/clzdi2.S     |  4 ----</div><div> lib/builtins/arm/clzsi2.S     |  3 ---</div>
<div> lib/builtins/arm/divmodsi4.S  |  3 ---</div><div> lib/builtins/arm/divsi3.S     |  3 ---</div><div> lib/builtins/arm/modsi3.S     |  3 ---</div><div> lib/builtins/arm/udivmodsi4.S | 16 +++-------------</div><div> lib/builtins/arm/udivsi3.S    | 21 +++------------------</div>
<div> lib/builtins/arm/umodsi3.S    | 18 ++----------------</div><div> 10 files changed, 8 insertions(+), 69 deletions(-)</div><div><br></div><div>diff --git a/lib/builtins/arm/bswapdi2.S b/lib/builtins/arm/bswapdi2.S</div>
<div>index c2e2ce9..6f228c5 100644</div><div>--- a/lib/builtins/arm/bswapdi2.S</div><div>+++ b/lib/builtins/arm/bswapdi2.S</div><div>@@ -11,9 +11,6 @@</div><div> </div><div> <span class="" style="white-space:pre">     </span>.syntax unified</div>
<div> <span class="" style="white-space:pre">  </span>.text</div><div>-#if __ARM_ARCH_ISA_THUMB == 2</div><div>-<span class="" style="white-space:pre">        </span>.thumb</div><div>-#endif</div><div> </div><div> //</div><div> // extern uint64_t __bswapdi2(uint64_t);</div>
<div>diff --git a/lib/builtins/arm/bswapsi2.S b/lib/builtins/arm/bswapsi2.S</div><div>index ad09655..9671339 100644</div><div>--- a/lib/builtins/arm/bswapsi2.S</div><div>+++ b/lib/builtins/arm/bswapsi2.S</div><div>@@ -11,9 +11,6 @@</div>
<div> </div><div> <span class="" style="white-space:pre"> </span>.syntax unified</div><div> <span class="" style="white-space:pre">  </span>.text</div><div>-#if __ARM_ARCH_ISA_THUMB == 2</div><div>-<span class="" style="white-space:pre">        </span>.thumb</div>
<div>-#endif</div><div> </div><div> //</div><div> // extern uint32_t __bswapsi2(uint32_t);</div><div>diff --git a/lib/builtins/arm/clzdi2.S b/lib/builtins/arm/clzdi2.S</div><div>index bcea485..08a18f7 100644</div><div>--- a/lib/builtins/arm/clzdi2.S</div>
<div>+++ b/lib/builtins/arm/clzdi2.S</div><div>@@ -15,10 +15,6 @@</div><div> </div><div> <span class="" style="white-space:pre">  </span>.syntax unified</div><div> <span class="" style="white-space:pre">  </span>.text</div>
<div>-#if __ARM_ARCH_ISA_THUMB == 2</div><div>-<span class="" style="white-space:pre">      </span>.thumb</div><div>-#endif</div><div>-</div><div> </div><div> <span class="" style="white-space:pre">    </span>.p2align<span class="" style="white-space:pre">  </span>2</div>
<div> DEFINE_COMPILERRT_FUNCTION(__clzdi2)</div><div>diff --git a/lib/builtins/arm/clzsi2.S b/lib/builtins/arm/clzsi2.S</div><div>index f0240b0..d177b72 100644</div><div>--- a/lib/builtins/arm/clzsi2.S</div><div>+++ b/lib/builtins/arm/clzsi2.S</div>
<div>@@ -15,9 +15,6 @@</div><div> </div><div> <span class="" style="white-space:pre"> </span>.syntax unified</div><div> <span class="" style="white-space:pre">  </span>.text</div><div>-#if __ARM_ARCH_ISA_THUMB == 2</div><div>
-<span class="" style="white-space:pre">      </span>.thumb</div><div>-#endif</div><div> </div><div> <span class="" style="white-space:pre">    </span>.p2align<span class="" style="white-space:pre">  </span>2</div><div> DEFINE_COMPILERRT_FUNCTION(__clzsi2)</div>
<div>diff --git a/lib/builtins/arm/divmodsi4.S b/lib/builtins/arm/divmodsi4.S</div><div>index 91bb2a5..fc017a1 100644</div><div>--- a/lib/builtins/arm/divmodsi4.S</div><div>+++ b/lib/builtins/arm/divmodsi4.S</div><div>@@ -23,9 +23,6 @@</div>
<div> </div><div> <span class="" style="white-space:pre"> </span>.syntax unified</div><div> <span class="" style="white-space:pre">  </span>.text</div><div>-#if __ARM_ARCH_ISA_THUMB == 2</div><div>-<span class="" style="white-space:pre">        </span>.thumb</div>
<div>-#endif</div><div> </div><div> <span class="" style="white-space:pre">   </span>.p2align 3</div><div> DEFINE_COMPILERRT_FUNCTION(__divmodsi4)</div><div>diff --git a/lib/builtins/arm/divsi3.S b/lib/builtins/arm/divsi3.S</div>
<div>index db47165..afb0acd 100644</div><div>--- a/lib/builtins/arm/divsi3.S</div><div>+++ b/lib/builtins/arm/divsi3.S</div><div>@@ -22,9 +22,6 @@</div><div> </div><div> <span class="" style="white-space:pre"> </span>.syntax unified</div>
<div> <span class="" style="white-space:pre">  </span>.text</div><div>-#if __ARM_ARCH_ISA_THUMB == 2</div><div>-<span class="" style="white-space:pre">        </span>.thumb</div><div>-#endif</div><div> </div><div> <span class="" style="white-space:pre">    </span>.p2align 3</div>
<div> // Ok, APCS and AAPCS agree on 32 bit args, so it's safe to use the same routine.</div><div>diff --git a/lib/builtins/arm/modsi3.S b/lib/builtins/arm/modsi3.S</div><div>index 7ed305e..4be4a22 100644</div><div>--- a/lib/builtins/arm/modsi3.S</div>
<div>+++ b/lib/builtins/arm/modsi3.S</div><div>@@ -22,9 +22,6 @@</div><div> </div><div> <span class="" style="white-space:pre">   </span>.syntax unified</div><div> <span class="" style="white-space:pre">  </span>.text</div><div>
-#if __ARM_ARCH_ISA_THUMB == 2</div><div>-<span class="" style="white-space:pre"> </span>.thumb</div><div>-#endif</div><div> </div><div> <span class="" style="white-space:pre">    </span>.p2align 3</div><div> DEFINE_COMPILERRT_FUNCTION(__modsi3)</div>
<div>diff --git a/lib/builtins/arm/udivmodsi4.S b/lib/builtins/arm/udivmodsi4.S</div><div>index 5b4e1bc..ddc8752 100644</div><div>--- a/lib/builtins/arm/udivmodsi4.S</div><div>+++ b/lib/builtins/arm/udivmodsi4.S</div><div>
@@ -16,9 +16,6 @@</div><div> </div><div> <span class="" style="white-space:pre">    </span>.syntax unified</div><div> <span class="" style="white-space:pre">  </span>.text</div><div>-#if __ARM_ARCH_ISA_THUMB == 2</div><div>-<span class="" style="white-space:pre">        </span>.thumb</div>
<div>-#endif</div><div> </div><div> <span class="" style="white-space:pre">   </span>.p2align 2</div><div> DEFINE_COMPILERRT_FUNCTION(__udivmodsi4)</div><div>@@ -99,16 +96,9 @@ DEFINE_COMPILERRT_FUNCTION(__udivmodsi4)</div>
<div> </div><div> #define<span class="" style="white-space:pre">  </span>IMM<span class="" style="white-space:pre">       </span>#</div><div> </div><div>-#if __ARM_ARCH_ISA_THUMB == 2</div><div>-#define ITT itt</div><div>-#else</div>
<div>-#define ITT @</div><div>-#endif</div><div>-</div><div>-#define block(shift)                                                           \</div><div>-<span class="" style="white-space:pre">   </span>cmp<span class="" style="white-space:pre">       </span>r0, r1, lsl IMM shift;                                         \</div>
<div>-<span class="" style="white-space:pre">   </span>ITT hs;                                                                \</div><div>-<span class="" style="white-space:pre">  </span>addhs<span class="" style="white-space:pre">     </span>r3, r3, IMM (1 << shift);                                      \</div>
<div>+#define block(shift) \</div><div>+<span class="" style="white-space:pre">     </span>cmp<span class="" style="white-space:pre">       </span>r0, r1, lsl IMM shift; \</div><div>+<span class="" style="white-space:pre">  </span>addhs<span class="" style="white-space:pre">     </span>r3, r3, IMM (1 << shift); \</div>
<div> <span class="" style="white-space:pre">  </span>subhs<span class="" style="white-space:pre">     </span>r0, r0, r1, lsl IMM shift</div><div> </div><div> <span class="" style="white-space:pre">       </span>block(31)</div><div>
diff --git a/lib/builtins/arm/udivsi3.S b/lib/builtins/arm/udivsi3.S</div><div>index 8695257..8fb1dca 100644</div><div>--- a/lib/builtins/arm/udivsi3.S</div><div>+++ b/lib/builtins/arm/udivsi3.S</div><div>@@ -16,17 +16,6 @@</div>
<div> </div><div> <span class="" style="white-space:pre"> </span>.syntax unified</div><div> <span class="" style="white-space:pre">  </span>.text</div><div>-#if __ARM_ARCH_ISA_THUMB == 2</div><div>-<span class="" style="white-space:pre">        </span>.thumb</div>
<div>-#endif</div><div>-</div><div>-#if __ARM_ARCH_ISA_THUMB == 2</div><div>-#define IT  it</div><div>-#define ITT itt</div><div>-#else</div><div>-#define IT  @</div><div>-#define ITT @</div><div>-#endif</div><div> </div>
<div> <span class="" style="white-space:pre">  </span>.p2align 2</div><div> DEFINE_AEABI_FUNCTION_ALIAS(__aeabi_uidiv, __udivsi3)</div><div>@@ -40,12 +29,9 @@ DEFINE_COMPILERRT_FUNCTION(__udivsi3)</div><div> <span class="" style="white-space:pre">  </span>bx  <span class="" style="white-space:pre">     </span>lr</div>
<div> #else</div><div> <span class="" style="white-space:pre">    </span>cmp<span class="" style="white-space:pre">       </span>r1, #1</div><div>-<span class="" style="white-space:pre">    </span>IT cc</div><div> <span class="" style="white-space:pre">    </span>bcc<span class="" style="white-space:pre">       </span>LOCAL_LABEL(divby0)</div>
<div>-<span class="" style="white-space:pre">   </span>IT eq</div><div> <span class="" style="white-space:pre">    </span>JMPc(lr, eq)</div><div> <span class="" style="white-space:pre">     </span>cmp<span class="" style="white-space:pre">       </span>r0, r1</div>
<div>-<span class="" style="white-space:pre">   </span>ITT cc</div><div> <span class="" style="white-space:pre">   </span>movcc<span class="" style="white-space:pre">     </span>r0, #0</div><div> <span class="" style="white-space:pre">   </span>JMPc(lr, cc)</div>
<div> <span class="" style="white-space:pre">  </span>/*</div><div>@@ -108,10 +94,9 @@ DEFINE_COMPILERRT_FUNCTION(__udivsi3)</div><div> </div><div> #define<span class="" style="white-space:pre">       </span>IMM<span class="" style="white-space:pre">       </span>#</div>
<div> </div><div>-#define block(shift)                                                           \</div><div>-<span class="" style="white-space:pre">     </span>cmp<span class="" style="white-space:pre">       </span>r0, r1, lsl IMM shift;                                         \</div>
<div>-<span class="" style="white-space:pre">   </span>ITT hs;                                                                \</div><div>-<span class="" style="white-space:pre">  </span>addhs<span class="" style="white-space:pre">     </span>r3, r3, IMM (1 << shift);                                      \</div>
<div>+#define block(shift) \</div><div>+<span class="" style="white-space:pre">     </span>cmp<span class="" style="white-space:pre">       </span>r0, r1, lsl IMM shift; \</div><div>+<span class="" style="white-space:pre">  </span>addhs<span class="" style="white-space:pre">     </span>r3, r3, IMM (1 << shift); \</div>
<div> <span class="" style="white-space:pre">  </span>subhs<span class="" style="white-space:pre">     </span>r0, r0, r1, lsl IMM shift</div><div> </div><div> <span class="" style="white-space:pre">       </span>block(31)</div><div>
diff --git a/lib/builtins/arm/umodsi3.S b/lib/builtins/arm/umodsi3.S</div><div>index c690df3..164646b 100644</div><div>--- a/lib/builtins/arm/umodsi3.S</div><div>+++ b/lib/builtins/arm/umodsi3.S</div><div>@@ -16,17 +16,6 @@</div>
<div> </div><div> <span class="" style="white-space:pre"> </span>.syntax unified</div><div> <span class="" style="white-space:pre">  </span>.text</div><div>-#if __ARM_ARCH_ISA_THUMB == 2</div><div>-<span class="" style="white-space:pre">        </span>.thumb</div>
<div>-#endif</div><div>-</div><div>-#if __ARM_ARCH_ISA_THUMB == 2</div><div>-#define IT  it</div><div>-#define ITT itt</div><div>-#else</div><div>-#define IT  @</div><div>-#define ITT @</div><div>-#endif</div><div> </div>
<div> <span class="" style="white-space:pre">  </span>.p2align 2</div><div> DEFINE_COMPILERRT_FUNCTION(__umodsi3)</div><div>@@ -41,11 +30,9 @@ DEFINE_COMPILERRT_FUNCTION(__umodsi3)</div><div> #else</div><div> <span class="" style="white-space:pre">    </span>cmp<span class="" style="white-space:pre">       </span>r1, #1</div>
<div> <span class="" style="white-space:pre">  </span>bcc<span class="" style="white-space:pre">       </span>LOCAL_LABEL(divby0)</div><div>-<span class="" style="white-space:pre">       </span>ITT eq</div><div> <span class="" style="white-space:pre">   </span>moveq<span class="" style="white-space:pre">     </span>r0, #0</div>
<div> <span class="" style="white-space:pre">  </span>JMPc(lr, eq)</div><div> <span class="" style="white-space:pre">     </span>cmp<span class="" style="white-space:pre">       </span>r0, r1</div><div>-<span class="" style="white-space:pre">    </span>IT cc</div>
<div> <span class="" style="white-space:pre">  </span>JMPc(lr, cc)</div><div> <span class="" style="white-space:pre">     </span>/*</div><div> <span class="" style="white-space:pre">       </span> * Implement division using binary long division algorithm.</div>
<div>@@ -103,9 +90,8 @@ DEFINE_COMPILERRT_FUNCTION(__umodsi3)</div><div> </div><div> #define<span class="" style="white-space:pre">   </span>IMM<span class="" style="white-space:pre">       </span>#</div><div> </div><div>-#define block(shift)                                                           \</div>
<div>-<span class="" style="white-space:pre">   </span>cmp<span class="" style="white-space:pre">       </span>r0, r1, lsl IMM shift;                                         \</div><div>-<span class="" style="white-space:pre">      </span>IT hs;                                                                 \</div>
<div>+#define block(shift) \</div><div>+<span class="" style="white-space:pre">     </span>cmp<span class="" style="white-space:pre">       </span>r0, r1, lsl IMM shift; \</div><div> <span class="" style="white-space:pre"> </span>subhs<span class="" style="white-space:pre">     </span>r0, r0, r1, lsl IMM shift</div>
<div> </div><div> <span class="" style="white-space:pre"> </span>block(31)</div><div>-- </div><div>2.0.0.526.g5318336</div><div><br></div></div>