Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
N
nettle
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Deploy
Releases
Package registry
Container registry
Model registry
Operate
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Norbert Pócs
nettle
Commits
07e97670
Commit
07e97670
authored
4 years ago
by
Maamoun TK
Committed by
Niels Möller
4 years ago
Browse files
Options
Downloads
Patches
Plain Diff
"PowerPC64" Add README (Reformatted)
parent
152da08e
No related branches found
No related tags found
No related merge requests found
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
powerpc64/README
+73
-0
73 additions, 0 deletions
powerpc64/README
with
73 additions
and
0 deletions
powerpc64/README
0 → 100644
+
73
−
0
View file @
07e97670
General-Purpose Register Conventions
Register Status Use
GPR0 volatile In function prologs.
GPR1 dedicated Stack pointer.
GPR2 dedicated Table of Contents (TOC) pointer.
GPR3 volatile First word of a function's argument list;
first word of a scalar function return.
GPR4 volatile Second word of a function's argument list;
second word of a scalar function return.
GPR5 volatile Third word of a function's argument list.
GPR6 volatile Fourth word of a function's argument list.
GPR7 volatile Fifth word of a function's argument list.
GPR8 volatile Sixth word of a function's argument list.
GPR9 volatile Seventh word of a function's argument list.
GPR10 volatile Eighth word of a function's argument list.
GPR11 volatile In calls by pointer and as an environment pointer
for languages that require it (for example, PASCAL).
GPR12 volatile For special exception handling required by certain
languages and in glink code.
GPR13 reserved Reserved under 64-bit environment;
not restored across system calls.
GPR14:GPR31 nonvolatile These registers must be preserved across
a function call.
Vector Register Conventions
Register Status
VR0:V19 Volatile
VR20:VR31 Nonvolatile (extended ABI mode) their values are preserved
across function calls
Addressing memory
There are many ways to reference data, in the sake of writing
position-independent code the current implementation uses GOT-indirect
addressing (Accessing data through the global offset table):
1. Define data in .data section
2. Load the address of data into register from the global offset table
e.g. ld 7, my_var@got(2)
3. Use the address to load the value of data into register
e.g. ld 3, 0(7)
Refer to [2] for more information about referencing data
VSX instructions "lxvd2x/stxvd2x" are used to load and store data to
memory instead of VR instructions "lvx/stvx" as it produces a fewer
instructions "lvx/stvx" can be used to load/store data into storage
operands but additional instructions are needed to access unaligned
storage operands, refer to "6.4.1 Accessing Unaligned Storage Operands"
in [3] to see an example of accessing unaligned storage operands.
"lxvd2x/stxvd2x" can be used to load/store data into unaligned storage
operands but permuting is needed for loading and storing data in
little-endian mode VSX registers are defined with "X" suffix
TODO: use architecture 3.0 instructions "lxv/stxv" instead for POWER9
and newer
Function Prologue
Big-endian systems only support ELFv1 ABI which requires the following
steps in the function prologue:
1. Write the "official procedure descriptor" in ".opd","aw" section
2. Write procedure description for .my_func in my_func label
3. Switch back to ".text" section for program code
4. Label the beginning of the code .my_func
Refer to [1] for more information
Little-endian systems are compatible with ELFv2 ABI, an example of
function prologue for ELFv2 ABI can be seen in [2]
[1] http://www.ibm.com/developerworks/linux/library/l-powasm1.html
[2] https://openpowerfoundation.org/?resource_lib=64-bit-elf-v2-abi-specification-power-architecture
[3] https://openpowerfoundation.org/?resource_lib=ibm-power-isa-version-2-07-b
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment