mirror of
https://github.com/Telecominfraproject/OpenCellular.git
synced 2026-01-08 16:41:55 +00:00
Add other helpers for compact switch on ARMv6-M. Signed-off-by: Vincent Palatin <vpalatin@chromium.org> BRANCH=none BUG=none TEST=none Change-Id: I711ee8361ff1545acd978974d9f9fc306ca43b78 Reviewed-on: https://chromium-review.googlesource.com/190711 Tested-by: Vincent Palatin <vpalatin@chromium.org> Reviewed-by: Randall Spangler <rspangler@chromium.org> Commit-Queue: Vincent Palatin <vpalatin@chromium.org>
78 lines
1.4 KiB
ArmAsm
78 lines
1.4 KiB
ArmAsm
/* Copyright (c) 2014 The Chromium OS Authors. All rights reserved.
|
|
* Use of this source code is governed by a BSD-style license that can be
|
|
* found in the LICENSE file.
|
|
*
|
|
* Thumb mode toolchain helpers for compact switch/case statement.
|
|
*/
|
|
|
|
#include "config.h"
|
|
|
|
.text
|
|
|
|
.syntax unified
|
|
.code 16
|
|
|
|
/*
|
|
* Helpers for compact switch
|
|
*
|
|
* r0: the table index
|
|
* lr: the table base address (need to clear bit 0)
|
|
*
|
|
* r0 and lr must be PRESERVED.
|
|
* r12 can be clobbered.
|
|
*/
|
|
.global __gnu_thumb1_case_uqi
|
|
.thumb_func
|
|
__gnu_thumb1_case_uqi:
|
|
mov r12, r1
|
|
mov r1, lr
|
|
lsrs r1, r1, #1
|
|
lsls r1, r1, #1
|
|
ldrb r1, [r1, r0]
|
|
lsls r1, r1, #1
|
|
add lr, lr, r1
|
|
mov r1, r12
|
|
bx lr
|
|
|
|
.global __gnu_thumb1_case_sqi
|
|
.thumb_func
|
|
__gnu_thumb1_case_sqi:
|
|
mov r12, r1
|
|
mov r1, lr
|
|
lsrs r1, r1, #1
|
|
lsls r1, r1, #1
|
|
ldrsb r1, [r1, r0]
|
|
lsls r1, r1, #1
|
|
add lr, lr, r1
|
|
mov r1, r12
|
|
bx lr
|
|
|
|
.global __gnu_thumb1_case_uhi
|
|
.thumb_func
|
|
__gnu_thumb1_case_uhi:
|
|
push {r0, r1}
|
|
mov r1, lr
|
|
lsrs r1, r1, #1
|
|
lsls r0, r0, #1
|
|
lsls r1, r1, #1
|
|
ldrh r1, [r1, r0]
|
|
lsls r1, r1, #1
|
|
add lr, lr, r1
|
|
pop {r0, r1}
|
|
bx lr
|
|
|
|
|
|
.global __gnu_thumb1_case_shi
|
|
.thumb_func
|
|
__gnu_thumb1_case_shi:
|
|
push {r0, r1}
|
|
mov r1, lr
|
|
lsrs r1, r1, #1
|
|
lsls r0, r0, #1
|
|
lsls r1, r1, #1
|
|
ldrsh r1, [r1, r0]
|
|
lsls r1, r1, #1
|
|
add lr, lr, r1
|
|
pop {r0, r1}
|
|
bx lr
|