summaryrefslogtreecommitdiff
path: root/arch/mips64/atomic_arch.h
AgeCommit message (Collapse)AuthorLines
2016-04-03add support for mips and mips64 r6 isaRich Felker-7/+13
mips32r6 and mips64r6 are actually new isas at both the asm source and opcode levels (pre-r6 code cannot run on r6) and thus need to be treated as a new subarch. the following changes are made, some of which yield code generation improvements for non-r6 targets too: - add subarch logic in configure script and reloc.h files for dynamic linker name. - suppress use of .set mips2 asm directives (used to allow mips2 atomic instructions on baseline mips1 builds; the kernel has to emulate them on mips1) except when actually needed. they cause wrong instruction encodings on r6, and pessimize inlining on at least some compilers. - only hard-code sync instruction encoding on mips1. - use "ZC" constraint instead of "m" constraint for llsc memory operands on r6, where the ll/sc instructions no longer accept full 16-bit offsets. - only hard-code rdhwr instruction encoding with .word on targets (pre-r2) where it may need trap-and-emulate by the kernel. otherwise, just use the instruction mnemonic, and allow an arbitrary destination register to be used.
2016-03-11correct pointer types for a_ll_p and a_sc_p primitives on mips64Rich Felker-4/+4
these changes should not affect generated code, but they reflect that the underlying objects operated on by a_cas_p are supposed to have type volatile void *, not volatile long. in theory a compiler could treat the effective type mismatch in the "m" memory operands as undefined behavior.
2016-03-11make mips64 a_sc_p atomic primitive's asm constraints work with clangRich Felker-1/+1
apparently clang does not accept matching-register input and output constraints that differ in size (32-bit vs 64-bit). based on patch by Jaydeep Patil.
2016-03-06add mips64 portRich Felker-0/+50
patch by Mahesh Bodapati and Jaydeep Patil of Imagination Technologies.