Hi! > PC-relative data referencing > ---------------------------- > > I agree that the current PC value can be loaded in a GPR using the trick > of call, pop on i386. > > Perhaps, on other architectures, we can do similar things. For instance, > in architectures that load the return address in a designated register > instead of pushing it on the stack, the trampoline could call a leaf function > that moves the value of that register into data_reg so that at the location > after the call instruction, the current PC is already loaded in data_reg. > SPARC is one example I can think of. > > My take is - if the ISA supports PC-relative data referencing explicitly (like > X64 or ARM64), then we can use it. Or, if the ABI specification documents an > approved way to load the PC into a GPR, we can use it. > > Otherwise, using an ABI quirk or a calling convention side effect to load the > PC into a GPR is, IMO, non-standard or non-compliant or non-approved or > whatever you want to call it. I would be conservative and not use ISAs are very well defined, and basically not changing. If you want to argue we should not use something, you should have very clear picture _why_ it is bad. "Non-standard or non-approved or whatever" just does not cut it. And yes, certain tricks may be seriously slow on modern CPUs, and we might want to avoid those. But other than that... you should have better argument than "it is non-standard". Best regards, Pavel -- (english) http://www.livejournal.com/~pavelmachek (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
Attachment:
signature.asc
Description: Digital signature