Comments (5)
I think we are already doing this: "For the purposes of this section, FLEN refers to the width of a floating-point register in the ABI. ... Floating-point registers fs0-fs11 shall be preserved across procedure calls, provided they hold values no more than FLEN bits wide."
So it follows that when the ABI FLEN is 0 that fs0-fs11 are not preserved across calls at all. Do you think we need to add a sentence clarifying this fact?
(FYI, GCC is doing something overly conservative here: it disallows holding values wider than the ABI FLEN in fs0-fs11 altogether. In the RV32D + ILP32F case, I'm not sure how to tell GCC that the registers are callee-saved for F values but call-clobbered for D values, so I think we will keep this conservative implementation. But in the ILP32 case, GCC should just treat fs0-fs11 as temporaries.)
from riscv-elf-psabi-doc.
The GCC behavior has been fixed to allow use of fs0-fs11 as call-clobbered registers in the ILP32 case. This doesn't break the ABI because, as I mentioned, the implementation previously disallowed the use of fs0-fs11 in soft-float code. riscvarchive/riscv-gcc#103
from riscv-elf-psabi-doc.
And even more explicit under the "base" integer calling convention: "No floating-point registers, if present, are preserved across calls." Sorry for the noise, I'd thought the tables under the "register map" were the only reference on callee-save registers and didn't re-check that assumption - sorry for missing that.
I think it is handy for the register tables to indicate which registers are callee-save. What do you think of a patch that changes the entry in the FPR tables to "Yes*" and an explanation:
"*: Values are only preserved if they are no larger than the width of a floating-point register in the targeted ABI. Therefore, these registers can always be considered temporaries if targeting the base integer calling convention."
There is obviously some repetition vs the other sections, but it seems if we're going to duplicate some information (which registers are preserved), we might as well add in the extra couple of sentences that explicitly clarify the situation.
from riscv-elf-psabi-doc.
Makes sense to me. I've made the change; make sure it doesn't get clobbered when the large refactoring PR gets merged :)
from riscv-elf-psabi-doc.
Thanks, closing this issue.
from riscv-elf-psabi-doc.
Related Issues (20)
- Specify relocation overflow checks HOT 1
- Specify a platform reserved register HOT 20
- Should calling convention also define ptrdiff_t? HOT 1
- Should we use lw/sw in push pop when we used ILP32, whether it's RV32 or RV64 HOT 3
- Operation semantics of __bf16 datatype HOT 2
- representation of GNU C fixed-size vectors HOT 4
- Deprecate R_RISCV_RVC_LUI? HOT 4
- Define GOT-Relative data relocation HOT 8
- Embedding R_RISCV_RELAX to another relocations HOT 7
- Define gp(x3) as global VLENB HOT 4
- Bitfield integer calling convention garbled
- Calling convention uses RV64GQ without definition or reference HOT 3
- Calling convention description of va_list et al. are unclear HOT 2
- Interpretation of floating-point types
- Linux ABI for Pointer Masking HOT 19
- New ABI for stack layout and frame pointer scheme HOT 4
- Change branch from "master" to "main" HOT 1
- Add CREL support HOT 3
- Add RELR support HOT 6
- Question about medlow's single 2 GiB address range HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from riscv-elf-psabi-doc.