Comments (5)
This was cross posted to both riscv-gcc #155 and riscv-elf-psabi-doc #91.
No, the gcc -fipa-sra option is not violating the ABI. There are multiple ways to look at this.
- The ABI documents the external interface to an object file. A compiler is free to choose a different interface for functions internal to an object file.
- The compiler is changing the function type signature, from one with a struct arg to one with multiple scalar args, and then using the standard ABI on the new type signature.
Either way you look at this, it is invisible to the programmer, as the compiler ensures that everything is correct, and emits appropriate DWARF2 debug info to make the new function type look like the old one.
from riscv-elf-psabi-doc.
This was cross posted to both riscv-gcc #155 and riscv-elf-psabi-doc #91.
No, the gcc -fipa-sra option is not violating the ABI. There are multiple ways to look at this.
- The ABI documents the external interface to an object file. A compiler is free to choose a different interface for functions internal to an object file.
- The compiler is changing the function type signature, from one with a struct arg to one with multiple scalar args, and then using the standard ABI on the new type signature.
Either way you look at this, it is invisible to the programmer, as the compiler ensures that everything is correct, and emits appropriate DWARF2 debug info to make the new function type look like the old one.
this means that if the function is local, you can not follow the calling convention at all. as long as the program is correct, the compiler can decide how to use all the registers, right?
example:
so if the function is local, it is detected in advance that the number of CALLEE registers used in the called function is less than the total number of hardware CALLEE registers, the compiler may also use CALLEE registers for function parameter passing?
from riscv-elf-psabi-doc.
so if the function is local, it is detected in advance that the number of CALLEE registers used in the called function is less than the total number of hardware CALLEE registers, the compiler may also use CALLEE registers or temporary registers for function parameter passing?
Yeah, compiler might use other than a0-a7 to pass register, IIRC it will happen in LLVM for local functions.
from riscv-elf-psabi-doc.
so if the function is local, it is detected in advance that the number of CALLEE registers used in the called function is less than the total number of hardware CALLEE registers, the compiler may also use CALLEE registers or temporary registers for function parameter passing?
Yeah, compiler might use other than a0-a7 to pass register, IIRC it will happen in LLVM for local functions.
has the 8.0 version of the latest release of LLVM been implemented? or included in the 9.0 version of the implementation plan
from riscv-elf-psabi-doc.
so if the function is local, it is detected in advance that the number of CALLEE registers used in the called function is less than the total number of hardware CALLEE registers, the compiler may also use CALLEE registers or temporary registers for function parameter passing?
Yeah, compiler might use other than a0-a7 to pass register, IIRC it will happen in LLVM for local functions.
has the 8.0 version of the latest release of LLVM been implemented? or included in the 9.0 version of the implementation plan
8.0 includes substantial RISC-V support, but it is not compiled by default (we are still an "experimental" backend). We intend to become non-experimental in the 9.0 release cycle.
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.