Commit Graph

4 Commits

Author SHA1 Message Date
Rich Felker
6d99ad91e8 add support for mips and mips64 r6 isa
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-04-03 10:42:37 +00:00
Rich Felker
de400b6609 correct pointer types for a_ll_p and a_sc_p primitives on mips64
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-11 05:12:56 +00:00
Rich Felker
27bf42cd9d make mips64 a_sc_p atomic primitive's asm constraints work with clang
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-11 00:02:10 -05:00
Rich Felker
83933573af add mips64 port
patch by Mahesh Bodapati and Jaydeep Patil of Imagination
Technologies.
2016-03-06 17:41:56 +00:00