Skip to content

target-feature -hard-float for powerpc #117347

Open
@Emilgardis

Description

@Emilgardis

RUSTFLAGS="-C target-feature=-crt-static,-hard-float" cargo +nightly build --release --target powerpc-unknown-linux-musl

gives the warning

warning: unknown feature specified for `-Ctarget-feature`: `hard-float`
  |
  = note: it is still passed through to the codegen backend
  = help: consider filing a feature request

while it should be supported by llvm

rustc +nightly --print=target-features -Z unstable-options --target powerpc-unknown-linux-musl
Features supported by rustc for this target:
    altivec                        - Enable Altivec instructions.
    power10-vector                 - Enable POWER10 vector instructions.
    power8-altivec                 - Enable POWER8 Altivec instructions.
    power8-vector                  - Enable POWER8 vector instructions.
    power9-altivec                 - Enable POWER9 Altivec instructions.
    power9-vector                  - Enable POWER9 vector instructions.
    vsx                            - Enable VSX instructions.
    crt-static                     - Enables C Run-time Libraries to be statically linked.

Code-generation features supported by LLVM for this target:
    64bit                          - Enable 64-bit instructions.
    64bitregs                      - Enable 64-bit registers usage for ppc32 [beta].
    aix                            - AIX OS.
    allow-unaligned-fp-access      - CPU does not trap on unaligned FP access.
    booke                          - Enable Book E instructions.
    bpermd                         - Enable the bpermd instruction.
    cmpb                           - Enable the cmpb instruction.
    crbits                         - Use condition-register bits individually.
    crypto                         - Enable POWER8 Crypto instructions.
    direct-move                    - Enable Power8 direct move instructions.
    e500                           - Enable E500/E500mc instructions.
    efpu2                          - Enable Embedded Floating-Point APU 2 instructions.
    extdiv                         - Enable extended divide instructions.
    fast-MFLR                      - MFLR is a fast instruction.
    fcpsgn                         - Enable the fcpsgn instruction.
    float128                       - Enable the __float128 data type for IEEE-754R Binary128..
    fpcvt                          - Enable fc[ft]* (unsigned and single-precision) and lfiwzx instructions.
    fprnd                          - Enable the fri[mnpz] instructions.
    fpu                            - Enable classic FPU instructions.
    fre                            - Enable the fre instruction.
    fres                           - Enable the fres instruction.
    frsqrte                        - Enable the frsqrte instruction.
    frsqrtes                       - Enable the frsqrtes instruction.
    fsqrt                          - Enable the fsqrt instruction.
    fuse-add-logical               - Target supports Add with Logical Operations fusion.
    fuse-addi-load                 - Power8 Addi-Load fusion.
    fuse-addis-load                - Power8 Addis-Load fusion.
    fuse-arith-add                 - Target supports Arithmetic Operations with Add fusion.
    fuse-back2back                 - Target supports general back to back fusion.
    fuse-cmp                       - Target supports Comparison Operations fusion.
    fuse-logical                   - Target supports Logical Operations fusion.
    fuse-logical-add               - Target supports Logical with Add Operations fusion.
    fuse-sha3                      - Target supports SHA3 assist fusion.
    fuse-store                     - Target supports store clustering.
    fuse-wideimm                   - Target supports Wide-Immediate fusion.
    fuse-zeromove                  - Target supports move to SPR with branch fusion.
    fusion                         - Target supports instruction fusion.
    hard-float                     - Enable floating-point instructions.
    htm                            - Enable Hardware Transactional Memory instructions.
    icbt                           - Enable icbt instruction.
    invariant-function-descriptors - Assume function descriptors are invariant.
    isa-future-instructions        - Enable instructions for Future ISA..
    isa-v206-instructions          - Enable instructions in ISA 2.06..
    isa-v207-instructions          - Enable instructions in ISA 2.07..
    isa-v30-instructions           - Enable instructions in ISA 3.0..
    isa-v31-instructions           - Enable instructions in ISA 3.1..
    isel                           - Enable the isel instruction.
    ldbrx                          - Enable the ldbrx instruction.
    lfiwax                         - Enable the lfiwax instruction.
    longcall                       - Always use indirect calls.
    mfocrf                         - Enable the MFOCRF instruction.
    mma                            - Enable MMA instructions.
    modern-aix-as                  - AIX system assembler is modern enough to support new mnes.
    msync                          - Has only the msync instruction instead of sync.
    paired-vector-memops           - 32Byte load and store instructions.
    partword-atomics               - Enable l[bh]arx and st[bh]cx..
    pcrelative-memops              - Enable PC relative Memory Ops.
    popcntd                        - Enable the popcnt[dw] instructions.
    ppc-postra-sched               - Use PowerPC post-RA scheduling strategy.
    ppc-prera-sched                - Use PowerPC pre-RA scheduling strategy.
    ppc4xx                         - Enable PPC 4xx instructions.
    ppc6xx                         - Enable PPC 6xx instructions.
    predictable-select-expensive   - Prefer likely predicted branches over selects.
    prefix-instrs                  - Enable prefixed instructions.
    privileged                     - Add privileged instructions.
    quadword-atomics               - Enable lqarx and stqcx..
    recipprec                      - Assume higher precision reciprocal estimates.
    rop-protect                    - Add ROP protect.
    secure-plt                     - Enable secure plt mode.
    slow-popcntd                   - Has slow popcnt[dw] instructions.
    spe                            - Enable SPE instructions.
    stfiwx                         - Enable the stfiwx instruction.
    two-const-nr                   - Requires two constant Newton-Raphson computation.
    vectors-use-two-units          - Vectors use two units.

Use +feature to enable a feature, or -feature to disable it.
For example, rustc -C target-cpu=mycpu -C target-feature=+feature1,-feature2

Code-generation features cannot be used in cfg or #[target_feature],
and may be renamed or removed in a future version of LLVM or rustc.

is the error supposed to happen or is this expected?

cc cross-rs/cross#1363

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-target-featureArea: Enabling/disabling target features like AVX, Neon, etc.C-bugCategory: This is a bug.O-PowerPCTarget: PowerPC processorsT-compilerRelevant to the compiler team, which will review and decide on the PR/issue.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions