add explicit alignment directives to assure arm code is 4-byte aligned

git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@102030 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/arm/adddf3vfp.S b/lib/arm/adddf3vfp.S
index 1b49daa..5e705e3 100644
--- a/lib/arm/adddf3vfp.S
+++ b/lib/arm/adddf3vfp.S
@@ -15,6 +15,7 @@
 // Adds two double precision floating point numbers using the Darwin
 // calling convention where double arguments are passsed in GPR pairs
 //
+	.align 2
 DEFINE_COMPILERRT_FUNCTION(__adddf3vfp)
 	fmdrr	d6, r0, r1		// move first param from r0/r1 pair into d6
 	fmdrr	d7, r2, r3		// move second param from r2/r3 pair into d7
diff --git a/lib/arm/addsf3vfp.S b/lib/arm/addsf3vfp.S
index 292d052..36d509c 100644
--- a/lib/arm/addsf3vfp.S
+++ b/lib/arm/addsf3vfp.S
@@ -15,6 +15,7 @@
 // Adds two single precision floating point numbers using the Darwin
 // calling convention where single arguments are passsed in GPRs
 //
+	.align 2
 DEFINE_COMPILERRT_FUNCTION(__addsf3vfp)
 	fmsr	s14, r0		// move first param from r0 into float register
 	fmsr	s15, r1		// move second param from r1 into float register
diff --git a/lib/arm/bswapdi2.S b/lib/arm/bswapdi2.S
index 2a3465b..262171e 100644
--- a/lib/arm/bswapdi2.S
+++ b/lib/arm/bswapdi2.S
@@ -14,6 +14,7 @@
 //
 // Reverse all the bytes in a 64-bit integer.
 //
+	.align 2
 DEFINE_COMPILERRT_FUNCTION(__bswapdi2)
 	rev	r2, r1		// reverse bytes in high 32-bits into temp2
 	rev	r3, r0		// reverse bytes in low 32-bit into temp3
diff --git a/lib/arm/bswapsi2.S b/lib/arm/bswapsi2.S
index dd9faf1..74c25b8 100644
--- a/lib/arm/bswapsi2.S
+++ b/lib/arm/bswapsi2.S
@@ -14,6 +14,7 @@
 //
 // Reverse all the bytes in a 32-bit integer.
 //
+	.align 2
 DEFINE_COMPILERRT_FUNCTION(__bswapsi2)
 	rev	r0, r0		// reverse bytes in parameter and put into result register
 	bx	lr
diff --git a/lib/arm/divdf3vfp.S b/lib/arm/divdf3vfp.S
index a809427..e43baa3 100644
--- a/lib/arm/divdf3vfp.S
+++ b/lib/arm/divdf3vfp.S
@@ -15,6 +15,7 @@
 // Divides two double precision floating point numbers using the Darwin
 // calling convention where double arguments are passsed in GPR pairs
 //
+	.align 2
 DEFINE_COMPILERRT_FUNCTION(__divdf3vfp)
 	fmdrr	d6, r0, r1		// move first param from r0/r1 pair into d6
 	fmdrr	d7, r2, r3		// move second param from r2/r3 pair into d7
diff --git a/lib/arm/divsf3vfp.S b/lib/arm/divsf3vfp.S
index 67b8a0c..d96c930 100644
--- a/lib/arm/divsf3vfp.S
+++ b/lib/arm/divsf3vfp.S
@@ -15,6 +15,7 @@
 // Divides two single precision floating point numbers using the Darwin
 // calling convention where single arguments are passsed like 32-bit ints.
 //
+	.align 2
 DEFINE_COMPILERRT_FUNCTION(__divsf3vfp)
 	fmsr	s14, r0		// move first param from r0 into float register
 	fmsr	s15, r1		// move second param from r1 into float register
diff --git a/lib/arm/eqdf2vfp.S b/lib/arm/eqdf2vfp.S
index 771d853..d4384ec 100644
--- a/lib/arm/eqdf2vfp.S
+++ b/lib/arm/eqdf2vfp.S
@@ -16,6 +16,7 @@
 // Uses Darwin calling convention where double precision arguments are passsed 
 // like in GPR pairs.
 //
+	.align 2
 DEFINE_COMPILERRT_FUNCTION(__eqdf2vfp)
 	fmdrr	d6, r0, r1	// load r0/r1 pair in double register
 	fmdrr	d7, r2, r3	// load r2/r3 pair in double register
diff --git a/lib/arm/eqsf2vfp.S b/lib/arm/eqsf2vfp.S
index bf4cd1f..07355a3 100644
--- a/lib/arm/eqsf2vfp.S
+++ b/lib/arm/eqsf2vfp.S
@@ -16,6 +16,7 @@
 // Uses Darwin calling convention where single precision arguments are passsed 
 // like 32-bit ints
 //
+	.align 2
 DEFINE_COMPILERRT_FUNCTION(__eqsf2vfp)
 	fmsr	s14, r0     // move from GPR 0 to float register
 	fmsr	s15, r1	    // move from GPR 1 to float register
diff --git a/lib/arm/extendsfdf2vfp.S b/lib/arm/extendsfdf2vfp.S
index 8df97b5..4343a7e 100644
--- a/lib/arm/extendsfdf2vfp.S
+++ b/lib/arm/extendsfdf2vfp.S
@@ -16,6 +16,7 @@
 // Uses Darwin calling convention where a single precision parameter is 
 // passed in a GPR and a double precision result is returned in R0/R1 pair.
 //
+	.align 2
 DEFINE_COMPILERRT_FUNCTION(__extendsfdf2vfp)
 	fmsr	s15, r0      // load float register from R0
 	fcvtds	d7, s15      // convert single to double
diff --git a/lib/arm/fixdfsivfp.S b/lib/arm/fixdfsivfp.S
index 70d8027..30458cc 100644
--- a/lib/arm/fixdfsivfp.S
+++ b/lib/arm/fixdfsivfp.S
@@ -16,6 +16,7 @@
 // Uses Darwin calling convention where a double precision parameter is 
 // passed in GPR register pair.
 //
+	.align 2
 DEFINE_COMPILERRT_FUNCTION(__fixdfsivfp)
 	fmdrr	d7, r0, r1    // load double register from R0/R1
 	ftosizd	s15, d7       // convert double to 32-bit int into s15
diff --git a/lib/arm/fixsfsivfp.S b/lib/arm/fixsfsivfp.S
index 17d016c..ce6f18e 100644
--- a/lib/arm/fixsfsivfp.S
+++ b/lib/arm/fixsfsivfp.S
@@ -16,6 +16,7 @@
 // Uses Darwin calling convention where a single precision parameter is 
 // passed in a GPR..
 //
+	.align 2
 DEFINE_COMPILERRT_FUNCTION(__fixsfsivfp)
 	fmsr	s15, r0      // load float register from R0
 	ftosizs	s15, s15     // convert single to 32-bit int into s15
diff --git a/lib/arm/fixunsdfsivfp.S b/lib/arm/fixunsdfsivfp.S
index a7299f4..7e766c0 100644
--- a/lib/arm/fixunsdfsivfp.S
+++ b/lib/arm/fixunsdfsivfp.S
@@ -17,6 +17,7 @@
 // Uses Darwin calling convention where a double precision parameter is 
 // passed in GPR register pair.
 //
+	.align 2
 DEFINE_COMPILERRT_FUNCTION(__fixunsdfsivfp)
 	fmdrr	d7, r0, r1    // load double register from R0/R1
 	ftouizd	s15, d7       // convert double to 32-bit int into s15
diff --git a/lib/arm/fixunssfsivfp.S b/lib/arm/fixunssfsivfp.S
index 166a2ad..ba2344f 100644
--- a/lib/arm/fixunssfsivfp.S
+++ b/lib/arm/fixunssfsivfp.S
@@ -17,6 +17,7 @@
 // Uses Darwin calling convention where a single precision parameter is 
 // passed in a GPR..
 //
+	.align 2
 DEFINE_COMPILERRT_FUNCTION(__fixunssfsivfp)
 	fmsr	s15, r0      // load float register from R0
 	ftouizs	s15, s15     // convert single to 32-bit unsigned into s15
diff --git a/lib/arm/floatsidfvfp.S b/lib/arm/floatsidfvfp.S
index 45bfa34..5ed4ace 100644
--- a/lib/arm/floatsidfvfp.S
+++ b/lib/arm/floatsidfvfp.S
@@ -16,6 +16,7 @@
 // Uses Darwin calling convention where a double precision result is 
 // return in GPR register pair.
 //
+	.align 2
 DEFINE_COMPILERRT_FUNCTION(__floatsidfvfp)
 	fmsr	s15, r0		   // move int to float register s15
 	fsitod	d7, s15        // convert 32-bit int in s15 to double in d7
diff --git a/lib/arm/floatsisfvfp.S b/lib/arm/floatsisfvfp.S
index 1b74299..0114c78 100644
--- a/lib/arm/floatsisfvfp.S
+++ b/lib/arm/floatsisfvfp.S
@@ -16,6 +16,7 @@
 // Uses Darwin calling convention where a single precision result is 
 // return in a GPR..
 //
+	.align 2
 DEFINE_COMPILERRT_FUNCTION(__floatsisfvfp)
 	fmsr	s15, r0	     // move int to float register s15
 	fsitos	s15, s15     // convert 32-bit int in s15 to float in s15
diff --git a/lib/arm/floatunssidfvfp.S b/lib/arm/floatunssidfvfp.S
index 9866a66..d1bfe3a 100644
--- a/lib/arm/floatunssidfvfp.S
+++ b/lib/arm/floatunssidfvfp.S
@@ -16,6 +16,7 @@
 // Uses Darwin calling convention where a double precision result is 
 // return in GPR register pair.
 //
+	.align 2
 DEFINE_COMPILERRT_FUNCTION(__floatunssidfvfp)
 	fmsr	s15, r0		   // move int to float register s15
 	fuitod	d7, s15        // convert 32-bit int in s15 to double in d7
diff --git a/lib/arm/floatunssisfvfp.S b/lib/arm/floatunssisfvfp.S
index 065742b..0b73577 100644
--- a/lib/arm/floatunssisfvfp.S
+++ b/lib/arm/floatunssisfvfp.S
@@ -16,6 +16,7 @@
 // Uses Darwin calling convention where a single precision result is 
 // return in a GPR..
 //
+	.align 2
 DEFINE_COMPILERRT_FUNCTION(__floatunssisfvfp)
 	fmsr	s15, r0	     // move int to float register s15
 	fuitos 	s15, s15     // convert 32-bit int in s15 to float in s15
diff --git a/lib/arm/gedf2vfp.S b/lib/arm/gedf2vfp.S
index cb8c716..6ab856f 100644
--- a/lib/arm/gedf2vfp.S
+++ b/lib/arm/gedf2vfp.S
@@ -16,6 +16,7 @@
 // Uses Darwin calling convention where double precision arguments are passsed 
 // like in GPR pairs.
 //
+	.align 2
 DEFINE_COMPILERRT_FUNCTION(__gedf2vfp)
 	fmdrr	d6, r0, r1	// load r0/r1 pair in double register
 	fmdrr	d7, r2, r3	// load r2/r3 pair in double register
diff --git a/lib/arm/gesf2vfp.S b/lib/arm/gesf2vfp.S
index 24b66e1..b00d821 100644
--- a/lib/arm/gesf2vfp.S
+++ b/lib/arm/gesf2vfp.S
@@ -16,6 +16,7 @@
 // Uses Darwin calling convention where single precision arguments are passsed 
 // like 32-bit ints
 //
+	.align 2
 DEFINE_COMPILERRT_FUNCTION(__gesf2vfp)
 	fmsr	s14, r0	    // move from GPR 0 to float register
 	fmsr	s15, r1	    // move from GPR 1 to float register
diff --git a/lib/arm/gtdf2vfp.S b/lib/arm/gtdf2vfp.S
index afd6d05..65594c7 100644
--- a/lib/arm/gtdf2vfp.S
+++ b/lib/arm/gtdf2vfp.S
@@ -16,6 +16,7 @@
 // Uses Darwin calling convention where double precision arguments are passsed 
 // like in GPR pairs.
 //
+	.align 2
 DEFINE_COMPILERRT_FUNCTION(__gtdf2vfp)
 	fmdrr	d6, r0, r1	// load r0/r1 pair in double register
 	fmdrr	d7, r2, r3	// load r2/r3 pair in double register
diff --git a/lib/arm/gtsf2vfp.S b/lib/arm/gtsf2vfp.S
index a4a03c6..53ef2a0 100644
--- a/lib/arm/gtsf2vfp.S
+++ b/lib/arm/gtsf2vfp.S
@@ -16,6 +16,7 @@
 // Uses Darwin calling convention where single precision arguments are passsed 
 // like 32-bit ints
 //
+	.align 2
 DEFINE_COMPILERRT_FUNCTION(__gtsf2vfp)
 	fmsr	s14, r0		// move from GPR 0 to float register
 	fmsr	s15, r1		// move from GPR 1 to float register
diff --git a/lib/arm/ledf2vfp.S b/lib/arm/ledf2vfp.S
index 188dc6a..327a7d5 100644
--- a/lib/arm/ledf2vfp.S
+++ b/lib/arm/ledf2vfp.S
@@ -16,6 +16,7 @@
 // Uses Darwin calling convention where double precision arguments are passsed 
 // like in GPR pairs.
 //
+	.align 2
 DEFINE_COMPILERRT_FUNCTION(__ledf2vfp)
 	fmdrr	d6, r0, r1	// load r0/r1 pair in double register
 	fmdrr	d7, r2, r3	// load r2/r3 pair in double register
diff --git a/lib/arm/lesf2vfp.S b/lib/arm/lesf2vfp.S
index fe3ec64..b7e05da 100644
--- a/lib/arm/lesf2vfp.S
+++ b/lib/arm/lesf2vfp.S
@@ -16,6 +16,7 @@
 // Uses Darwin calling convention where single precision arguments are passsed 
 // like 32-bit ints
 //
+	.align 2
 DEFINE_COMPILERRT_FUNCTION(__lesf2vfp)
 	fmsr	s14, r0     // move from GPR 0 to float register
 	fmsr	s15, r1     // move from GPR 1 to float register
diff --git a/lib/arm/ltdf2vfp.S b/lib/arm/ltdf2vfp.S
index 15a799b..55dfd80 100644
--- a/lib/arm/ltdf2vfp.S
+++ b/lib/arm/ltdf2vfp.S
@@ -16,6 +16,7 @@
 // Uses Darwin calling convention where double precision arguments are passsed 
 // like in GPR pairs.
 //
+	.align 2
 DEFINE_COMPILERRT_FUNCTION(__ltdf2vfp)
 	fmdrr	d6, r0, r1	// load r0/r1 pair in double register
 	fmdrr	d7, r2, r3	// load r2/r3 pair in double register
diff --git a/lib/arm/ltsf2vfp.S b/lib/arm/ltsf2vfp.S
index 6ae0658..3816a71 100644
--- a/lib/arm/ltsf2vfp.S
+++ b/lib/arm/ltsf2vfp.S
@@ -16,6 +16,7 @@
 // Uses Darwin calling convention where single precision arguments are passsed 
 // like 32-bit ints
 //
+	.align 2
 DEFINE_COMPILERRT_FUNCTION(__ltsf2vfp)
 	fmsr	s14, r0     // move from GPR 0 to float register
 	fmsr	s15, r1     // move from GPR 1 to float register
diff --git a/lib/arm/muldf3vfp.S b/lib/arm/muldf3vfp.S
index bb0fd43..cb503d3 100644
--- a/lib/arm/muldf3vfp.S
+++ b/lib/arm/muldf3vfp.S
@@ -15,6 +15,7 @@
 // Multiplies two double precision floating point numbers using the Darwin
 // calling convention where double arguments are passsed in GPR pairs
 //
+	.align 2
 DEFINE_COMPILERRT_FUNCTION(__muldf3vfp)
 	fmdrr	d6, r0, r1		// move first param from r0/r1 pair into d6
 	fmdrr	d7, r2, r3		// move second param from r2/r3 pair into d7
diff --git a/lib/arm/mulsf3vfp.S b/lib/arm/mulsf3vfp.S
index 69396a1..49b4d1d 100644
--- a/lib/arm/mulsf3vfp.S
+++ b/lib/arm/mulsf3vfp.S
@@ -15,6 +15,7 @@
 // Multiplies two single precision floating point numbers using the Darwin
 // calling convention where single arguments are passsed like 32-bit ints.
 //
+	.align 2
 DEFINE_COMPILERRT_FUNCTION(__mulsf3vfp)
 	fmsr	s14, r0		// move first param from r0 into float register
 	fmsr	s15, r1		// move second param from r1 into float register
diff --git a/lib/arm/nedf2vfp.S b/lib/arm/nedf2vfp.S
index a445cda..813864e 100644
--- a/lib/arm/nedf2vfp.S
+++ b/lib/arm/nedf2vfp.S
@@ -16,6 +16,7 @@
 // Uses Darwin calling convention where double precision arguments are passsed 
 // like in GPR pairs.
 //
+	.align 2
 DEFINE_COMPILERRT_FUNCTION(__nedf2vfp)
 	fmdrr	d6, r0, r1	// load r0/r1 pair in double register
 	fmdrr	d7, r2, r3	// load r2/r3 pair in double register
diff --git a/lib/arm/negdf2vfp.S b/lib/arm/negdf2vfp.S
index 9cbfc6a..8013975 100644
--- a/lib/arm/negdf2vfp.S
+++ b/lib/arm/negdf2vfp.S
@@ -15,6 +15,7 @@
 // Returns the negation a double precision floating point numbers using the 
 // Darwin calling convention where double arguments are passsed in GPR pairs.
 //
+	.align 2
 DEFINE_COMPILERRT_FUNCTION(__negdf2vfp)
 	eor	r1, r1, #-2147483648	// flip sign bit on double in r0/r1 pair
 	bx	lr
diff --git a/lib/arm/negsf2vfp.S b/lib/arm/negsf2vfp.S
index 6d78ef1..243c086 100644
--- a/lib/arm/negsf2vfp.S
+++ b/lib/arm/negsf2vfp.S
@@ -15,6 +15,7 @@
 // Returns the negation of a single precision floating point numbers using the 
 // Darwin calling convention where single arguments are passsed like 32-bit ints
 //
+	.align 2
 DEFINE_COMPILERRT_FUNCTION(__negsf2vfp)
 	eor	r0, r0, #-2147483648	// flip sign bit on float in r0
 	bx	lr
diff --git a/lib/arm/nesf2vfp.S b/lib/arm/nesf2vfp.S
index 62d80a5..d470afa 100644
--- a/lib/arm/nesf2vfp.S
+++ b/lib/arm/nesf2vfp.S
@@ -16,6 +16,7 @@
 // Uses Darwin calling convention where single precision arguments are passsed 
 // like 32-bit ints
 //
+	.align 2
 DEFINE_COMPILERRT_FUNCTION(__nesf2vfp)
 	fmsr	s14, r0	    // move from GPR 0 to float register
 	fmsr	s15, r1	    // move from GPR 1 to float register
diff --git a/lib/arm/restore_vfp_d8_d15_regs.S b/lib/arm/restore_vfp_d8_d15_regs.S
index 3c742f6..25404cd 100644
--- a/lib/arm/restore_vfp_d8_d15_regs.S
+++ b/lib/arm/restore_vfp_d8_d15_regs.S
@@ -25,6 +25,7 @@
 //
 // Restore registers d8-d15 from stack
 //
+	.align 2
 DEFINE_COMPILERRT_PRIVATE_FUNCTION(__restore_vfp_d8_d15_regs)
 	vldmia	sp!, {d8-d15}           // pop registers d8-d15 off stack
 	bx      lr                      // return to prolog
diff --git a/lib/arm/save_vfp_d8_d15_regs.S b/lib/arm/save_vfp_d8_d15_regs.S
index 97ceac1..92de61b 100644
--- a/lib/arm/save_vfp_d8_d15_regs.S
+++ b/lib/arm/save_vfp_d8_d15_regs.S
@@ -25,6 +25,7 @@
 //
 // Save registers d8-d15 onto stack
 //
+	.align 2
 DEFINE_COMPILERRT_PRIVATE_FUNCTION(__save_vfp_d8_d15_regs)
 	vstmdb	sp!, {d8-d15}           // push registers d8-d15 onto stack
 	bx      lr                      // return to prolog
diff --git a/lib/arm/subdf3vfp.S b/lib/arm/subdf3vfp.S
index b9cb29e..8841600 100644
--- a/lib/arm/subdf3vfp.S
+++ b/lib/arm/subdf3vfp.S
@@ -15,6 +15,7 @@
 // Returns difference between two double precision floating point numbers using 
 // the Darwin calling convention where double arguments are passsed in GPR pairs
 //
+	.align 2
 DEFINE_COMPILERRT_FUNCTION(__subdf3vfp)
 	fmdrr	d6, r0, r1		// move first param from r0/r1 pair into d6
 	fmdrr	d7, r2, r3		// move second param from r2/r3 pair into d7
diff --git a/lib/arm/subsf3vfp.S b/lib/arm/subsf3vfp.S
index b6942bd..4ead9c2 100644
--- a/lib/arm/subsf3vfp.S
+++ b/lib/arm/subsf3vfp.S
@@ -16,6 +16,7 @@
 // using the Darwin calling convention where single arguments are passsed
 // like 32-bit ints.
 //
+	.align 2
 DEFINE_COMPILERRT_FUNCTION(__subsf3vfp)
 	fmsr	s14, r0		// move first param from r0 into float register
 	fmsr	s15, r1		// move second param from r1 into float register
diff --git a/lib/arm/switch16.S b/lib/arm/switch16.S
index 7255401..05c7b98 100644
--- a/lib/arm/switch16.S
+++ b/lib/arm/switch16.S
@@ -29,6 +29,7 @@
 // The table contains signed 2-byte sized elements which are 1/2 the distance
 // from lr to the target label.
 //
+	.align 2
 DEFINE_COMPILERRT_PRIVATE_FUNCTION(__switch16)
 	ldrh    ip, [lr, #-1]           // get first 16-bit word in table
 	cmp     r0, ip                  // compare with index
diff --git a/lib/arm/switch32.S b/lib/arm/switch32.S
index 2a36fef..a127cb7 100644
--- a/lib/arm/switch32.S
+++ b/lib/arm/switch32.S
@@ -29,6 +29,7 @@
 // The table contains signed 4-byte sized elements which are the distance
 // from lr to the target label.
 //
+	.align 2
 DEFINE_COMPILERRT_PRIVATE_FUNCTION(__switch32)
 	ldr     ip, [lr, #-1]            // get first 32-bit word in table
 	cmp     r0, ip                   // compare with index
diff --git a/lib/arm/switch8.S b/lib/arm/switch8.S
index 530acfd..d05f6ac 100644
--- a/lib/arm/switch8.S
+++ b/lib/arm/switch8.S
@@ -29,6 +29,7 @@
 // The table contains signed byte sized elements which are 1/2 the distance
 // from lr to the target label.
 //
+	.align 2
 DEFINE_COMPILERRT_PRIVATE_FUNCTION(__switch8)
 	ldrb    ip, [lr, #-1]           // get first byte in table
 	cmp     r0, ip                  // signed compare with index
diff --git a/lib/arm/switchu8.S b/lib/arm/switchu8.S
index e161c41..faffddb 100644
--- a/lib/arm/switchu8.S
+++ b/lib/arm/switchu8.S
@@ -29,6 +29,7 @@
 // The table contains unsigned byte sized elements which are 1/2 the distance
 // from lr to the target label.
 //
+	.align 2
 DEFINE_COMPILERRT_PRIVATE_FUNCTION(__switchu8)
 	ldrb    ip, [lr, #-1]           // get first byte in table
 	cmp     r0, ip                  // compare with index
diff --git a/lib/arm/sync_synchronize.S b/lib/arm/sync_synchronize.S
index 40b584e..76fdab1 100644
--- a/lib/arm/sync_synchronize.S
+++ b/lib/arm/sync_synchronize.S
@@ -21,6 +21,7 @@
 
 #if __APPLE__
 
+	.align 2
 DEFINE_COMPILERRT_PRIVATE_FUNCTION(__sync_synchronize)
 	stmfd	sp!, {r7, lr}
 	add		r7, sp, #0
diff --git a/lib/arm/truncdfsf2vfp.S b/lib/arm/truncdfsf2vfp.S
index 26f8b82..5725e25 100644
--- a/lib/arm/truncdfsf2vfp.S
+++ b/lib/arm/truncdfsf2vfp.S
@@ -16,6 +16,7 @@
 // Uses Darwin calling convention where a double precision parameter is 
 // passed in a R0/R1 pair and a signle precision result is returned in R0.
 //
+	.align 2
 DEFINE_COMPILERRT_FUNCTION(__truncdfsf2vfp)
 	fmdrr	d7, r0, r1   // load double from r0/r1 pair
 	fcvtsd	s15, d7      // convert double to single (trucate precision)
diff --git a/lib/arm/unorddf2vfp.S b/lib/arm/unorddf2vfp.S
index 6b4bcb6..de00b07 100644
--- a/lib/arm/unorddf2vfp.S
+++ b/lib/arm/unorddf2vfp.S
@@ -16,6 +16,7 @@
 // Uses Darwin calling convention where double precision arguments are passsed 
 // like in GPR pairs.
 //
+	.align 2
 DEFINE_COMPILERRT_FUNCTION(__unorddf2vfp)
 	fmdrr	d6, r0, r1	// load r0/r1 pair in double register
 	fmdrr	d7, r2, r3	// load r2/r3 pair in double register
diff --git a/lib/arm/unordsf2vfp.S b/lib/arm/unordsf2vfp.S
index 811d8cb..ab291a8 100644
--- a/lib/arm/unordsf2vfp.S
+++ b/lib/arm/unordsf2vfp.S
@@ -16,6 +16,7 @@
 // Uses Darwin calling convention where single precision arguments are passsed 
 // like 32-bit ints
 //
+	.align 2
 DEFINE_COMPILERRT_FUNCTION(__unordsf2vfp)
 	fmsr	s14, r0     // move from GPR 0 to float register
 	fmsr	s15, r1	    // move from GPR 1 to float register