summaryrefslogtreecommitdiff
path: root/sys/src/libc/arm/vlop.s
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@felloff.net>2016-06-26 15:16:23 +0200
committercinap_lenrek <cinap_lenrek@felloff.net>2016-06-26 15:16:23 +0200
commit69b0980a42da16d97349ea962e57a5f55684e1a8 (patch)
treef76348957a5c60a693b4706fca2de14e23d891fc /sys/src/libc/arm/vlop.s
parenta99cf56c7d670f6af88cab39de91f1d6ac36416f (diff)
libc: native _addv() and _subv() routines for arm
Diffstat (limited to 'sys/src/libc/arm/vlop.s')
-rw-r--r--sys/src/libc/arm/vlop.s29
1 files changed, 24 insertions, 5 deletions
diff --git a/sys/src/libc/arm/vlop.s b/sys/src/libc/arm/vlop.s
index 13f4948fe..bc2237a86 100644
--- a/sys/src/libc/arm/vlop.s
+++ b/sys/src/libc/arm/vlop.s
@@ -3,11 +3,30 @@ TEXT _mulv(SB), 1, $0
MOVW 8(FP),R11 /* h0 */
MOVW 12(FP),R4 /* l1 */
MOVW 16(FP),R5 /* h1 */
- MULLU R8,R4,(R6, R7) /* l0*l1 */
+ MULLU R8,R4,(R7,R6) /* l0*l1 */
MUL R8,R5,R5 /* l0*h1 */
+ ADD R5,R7
MUL R11,R4,R4 /* h0*l1 */
- ADD R4,R6
- ADD R5,R6
- MOVW R6,4(R0)
- MOVW R7,0(R0)
+ ADD R4,R7
+ MOVM.IA [R6,R7],(R0)
+ RET
+
+TEXT _addv(SB), 1, $0
+ MOVW 4(FP),R8 /* l0 */
+ MOVW 8(FP),R11 /* h0 */
+ MOVW 12(FP),R4 /* l1 */
+ MOVW 16(FP),R5 /* h1 */
+ ADD.S R8,R4
+ ADC R11,R5
+ MOVM.IA [R4,R5],(R0)
+ RET
+
+TEXT _subv(SB), 1, $0
+ MOVW 4(FP),R8 /* l0 */
+ MOVW 8(FP),R11 /* h0 */
+ MOVW 12(FP),R4 /* l1 */
+ MOVW 16(FP),R5 /* h1 */
+ SUB.S R4,R8,R4
+ SBC R5,R11,R5
+ MOVM.IA [R4,R5],(R0)
RET