CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
148 lines
4.7 KiB
ArmAsm
148 lines
4.7 KiB
ArmAsm
.syntax unified
|
|
.cpu cortex-m4
|
|
.fpu fpv4-sp-d16
|
|
.text
|
|
.align 1
|
|
.thumb
|
|
.thumb_func
|
|
.global _start
|
|
_start:
|
|
@ LDM CASE #1 (used when rx is in upper_list)
|
|
@ ldm rx, {...} ->
|
|
@ ldm rx!, {lower_list}
|
|
@ ldm rx, {upper_list}
|
|
@ b.w
|
|
ldm.w r9, {r1-r9}
|
|
|
|
@ LDM CASE #1 bis (used when rx is in upper_list and pc is
|
|
@ in reglist)
|
|
@ ldm rx, {...} ->
|
|
@ ldm rx!, {lower_list}
|
|
@ ldm rx, {upper_list}
|
|
ldm.w r9, {r1-r9, pc}
|
|
|
|
@ LDM CASE #2 (used when rx is not in upper_list)
|
|
@ ldm rx, {...} ->
|
|
@ mov ry, rx where ry is the lowest register from upper_list
|
|
@ ldm ry!, {lower_list}
|
|
@ ldm ry, {upper_list}
|
|
@ b.w
|
|
ldm.w r0, {r1-r9}
|
|
|
|
@ LDM CASE #2 bis (used when rx is in lower_list)
|
|
@ ldm rx, {...} ->
|
|
@ mov ry, rx where ry is the lowest register from upper_list
|
|
@ ldm ry!, {lower_list}
|
|
@ ldm ry, {upper_list}
|
|
@ b.w
|
|
ldm.w r1, {r1-r9}
|
|
|
|
@ LDM CASE #2 ter (used when rx is not in upper_list and pc is
|
|
@ in reglist)
|
|
@ ldm rx, {...} ->
|
|
@ mov ry, rx where ry is the lowest register from upper_list
|
|
@ ldm ry!, {lower_list}
|
|
@ ldm ry, {upper_list}
|
|
ldm.w r0, {r1-r9, pc}
|
|
|
|
@ LDM CASE #2 quater (used when rx is in lower_list and pc is
|
|
@ in reglist)
|
|
@ ldm rx, {...} ->
|
|
@ mov ry, rx where ry is the lowest register from upper_list
|
|
@ ldm ry!, {lower_list}
|
|
@ ldm ry, {upper_list}
|
|
ldm.w r1, {r1-r9, pc}
|
|
|
|
@ LDM CASE #3 (used when rx is not in upper_list)
|
|
@ ldm rx, {...} ->
|
|
@ ldm rx!, {lower_list}
|
|
@ ldm rx!, {upper_list}
|
|
@ b.w
|
|
@ Write-back variant are unpredictable when rx appears also in
|
|
@ the loaded registers
|
|
ldm.w r0!, {r1-r9}
|
|
|
|
@ LDM CASE #3 bis (used when rx is not in upper_list and pc is
|
|
@ in reglist)
|
|
@ ldm rx, {...} ->
|
|
@ ldm rx!, {lower_list}
|
|
@ ldm rx!, {upper_list}
|
|
ldm.w r0!, {r1-r9, pc}
|
|
|
|
@ LDM CASE #4 (used when pc is not in reglist and rx is in
|
|
@ lower_list)
|
|
@ ldmb rx, {...} ->
|
|
@ ldmb rx!, {upper_list}
|
|
@ ldmb rx, {lower_list}
|
|
ldmdb.w r1, {r1-r9}
|
|
|
|
@ LDM CASE #5 (used when pc is not in reglist and rx is not in
|
|
@ lower_list)
|
|
@ It looks like it this mean that it could be in upper_list or not
|
|
@ ldmdb rx, {...} ->
|
|
@ mov ry, rx where ry is the lowest register from lower_list
|
|
@ ldmdb ry!, {upper_list}
|
|
@ ldmdb ry , {lower_list}
|
|
@ b.w
|
|
ldmdb.w sl, {r1-r9}
|
|
|
|
@ LDM CASE #5 bis (used when pc is not in reglist and rx is in
|
|
@ upper_list)
|
|
@ ldmdb rx, {...} ->
|
|
@ mov ry, rx where ry is the lowest register from lower_list
|
|
@ ldmdb ry!, {upper_list}
|
|
@ ldmdb ry , {lower_list}
|
|
@ b.w
|
|
ldmdb.w r9, {r1-r9}
|
|
|
|
@ LDM CASE #6 (used when pc is in reglist and rx is in
|
|
@ upper_list)
|
|
@ ldmdb rx, {...} ->
|
|
@ sub rx, rx, #size (lower_list + upper_list)
|
|
@ ldm rx!, {lower_list}
|
|
@ ldm rx, {upper_list}
|
|
@ This case reverses the load order
|
|
ldmdb.w r9, {r1-r9, pc}
|
|
|
|
@ LDM CASE #6 bis (used when pc is in reglist and rx is in
|
|
@ lower_list)
|
|
@ ldmdb rx, {...} ->
|
|
@ sub rx, rx, #size (lower_list + upper_list)
|
|
@ ldm rx!, {lower_list}
|
|
@ ldm rx, {upper_list}
|
|
ldmdb.w r1, {r1-r9, pc}
|
|
|
|
@ LDM CASE #7 (used when pc is in reglist and rx is not in
|
|
@ upper_list)
|
|
@ ldmdb rx, {...} ->
|
|
@ sub ry, rx, #size (lower_list + upper_list) where ry is the lowest
|
|
@ register of the upper list
|
|
@ ldm ry!, {lower_list}
|
|
@ ldm ry , {upper_list}
|
|
@ This case reverses the load order
|
|
ldmdb.w r0, {r1-r9, pc}
|
|
|
|
@ LDM CASE #8 (used when pc is in not in reglist)
|
|
@ ldmdb rx!, {...} ->
|
|
@ ldm rx!, {upper_list}
|
|
@ ldm rx!, {lower_list}
|
|
@ b.w
|
|
ldmdb.w r0!, {r1-r9}
|
|
|
|
@ LDM CASE #9 (Used when pc is in reglist)
|
|
@ ldmdb rx!, {...} ->
|
|
@ sub rx, rx, #size (lower_list + upper_list)
|
|
@ mov ry, rx where ry is the lowest register from upper_list
|
|
@ ldm ry!, {lower_list}
|
|
@ ldm ry , {upper_list}
|
|
ldmdb.w r0!, {r1-r9, pc}
|
|
|
|
@ POP CASE #1 (list does not include pc)
|
|
@ pop {...} -> pop {lower_list} pop {upper_list}
|
|
@ b.w
|
|
pop {r0-r9}
|
|
|
|
@ POP CASE #2 (list includes PC)
|
|
@ pop {...} -> pop {lower_list} pop {upper_list}
|
|
pop {r0-r9, pc}
|