93d8990 [AArch64] Fix +nofp16 handling

Authored and Committed by Szabolcs Nagy 7 years ago
    [AArch64] Fix +nofp16 handling
    
    Feature flag handling was not perfect, +nofp16 disabled fp
    instructions too.
    
    New feature flag macros were added to check features with multiple
    bits set (matters for FP_F16 and SIMD_F16 opcode feature tests).
    The unused AARCH64_OPCODE_HAS_FEATURE was removed, all checks should
    use one of the AARCH64_CPU_HAS_* macros.  AARCH64_CPU_HAS_FEATURE
    now checks all feature bits.
    
    The aarch64_features table now contains the dependencies as
    a separate field (so when the feature is enabled all dependencies
    are enabled and when it is disabled everything that depends on it
    is disabled).
    
    Note that armv8-a+foo+nofoo is not equivalent to armv8-a if
    +foo turns on dependent features that nofoo does not turn off.
    
    gas/
    	* config/tc-aarch64.c (struct aarch64_option_cpu_value_table): Add
    	require field.
    	(aarch64_features): Initialize require fields.
    	(aarch64_parse_features): Handle dependencies.
    	(aarch64_feature_enable_set, aarch64_feature_disable_set): New.
    	(md_assemble): Use AARCH64_CPU_HAS_ALL_FEATURES.
    	* testsuite/gas/aarch64/illegal-nofp16.s: New.
    	* testsuite/gas/aarch64/illegal-nofp16.l: New.
    	* testsuite/gas/aarch64/illegal-nofp16.d: New.
    
    include/
    	* opcode/aarch64.h (AARCH64_CPU_HAS_ALL_FEATURES): New.
    	(AARCH64_CPU_HAS_ANY_FEATURES): New.
    	(AARCH64_CPU_HAS_FEATURE): Define as AARCH64_CPU_HAS_ALL_FEATURES.
    	(AARCH64_OPCODE_HAS_FEATURE): Remove.
    
        
file modified
+12 -0
file modified
+67 -17
file modified
+7 -0
file modified
+7 -4