compiling to thumb2.
* grub-core/kern/arm/cache_armv7.S: Likewise.
* grub-core/lib/arm/setjmp.S: Likewise.
+2013-11-16 Vladimir Serbinenko <phcoder@gmail.com>
+
+ * grub-core/kern/arm/cache.S: Don't switch back to ARM mode when
+ compiling to thumb2.
+ * grub-core/kern/arm/cache_armv7.S: Likewise.
+ * grub-core/lib/arm/setjmp.S: Likewise.
+
2013-11-16 Leif Lindholm <leif.lindholm@linaro.org>
* grub-core/kern/arm/uboot/startup.S: delete superflouous save of r8
.file "cache.S"
.text
.syntax unified
+#if !defined (__thumb2__) || !defined (ARMV7)
.arm
+#else
+ .thumb
+#endif
+
#if !defined (ARMV6) && !defined (ARMV7)
# error Unsupported architecture version!
#endif
.file "cache_armv7.S"
.text
.syntax unified
- .arm
+#if !defined (__thumb2__)
.arch armv7a
+ .arm
+#else
+ .arch armv7
+ .thumb
+#endif
# define DMB dmb
# define DSB dsb
# define ISB isb
@ read current cache information
mrc p15, 1, r8, c0, c0, 0 @ Read CCSIDR
lsr r3, r8, #13 @ Number of sets -1
- ldr r9, =0x3fff
- and r3, r3, r9
+
+ @ Keep only 14 bits of r3
+ lsl r3, r3, #18
+ lsr r3, r3, #18
+
lsr r4, r8, #3 @ Number of ways -1
- ldr r9, =0x1ff
- and r4, r4, r9
+
+ @ Keep only 9 bits of r4
+ lsl r4, r4, #23
+ lsr r4, r4, #23
+
and r7, r8, #7 @ log2(line size in words) - 2
add r7, r7, #2 @ adjust
mov r8, #1
GRUB_MOD_LICENSE "GPLv3+"
.syntax unified
+#if !defined (__thumb2__)
.arm
+#else
+ .thumb
+#endif
.text
* int grub_setjmp (grub_jmp_buf env)
*/
FUNCTION(grub_setjmp)
- stm r0, { r4-r11, sp, lr }
+ mov r12, sp
+ stm r0, { r4-r12, lr }
mov r0, #0
bx lr
* int grub_longjmp (grub_jmp_buf env, int val)
*/
FUNCTION(grub_longjmp)
- ldm r0, { r4-r11, sp, lr }
+ ldm r0, { r4-r12, lr }
+ mov sp, r12
movs r0, r1
+ it eq
moveq r0, #1
bx lr