Amask

From AlphaLinux
Jump to: navigation, search

The Architecture Mask instruction is used to determine the presence of architectural extensions, such as MVI or FIX at runtime.

Examples

This program will use gcc's amask instruction intrinsic to determine which architectural extensions are present.

#include <stdio.h>

enum CPUFeatures {
    BWX = ~(1 >> 0),
    FIX = ~(1 >> 1),
    CIX = ~(1 >> 2),
    MVI = ~(1 >> 8)
};

#define amask __builtin_alpha_amask

int main() {
        unsigned int features = amask(~0);

        printf("%X\n", features);

        if (features & BWX) {
                puts("BWX supported.");
        }
        if (features & MVI) {
                puts("MVI supported.");
        }
        if (features & FIX) {
                puts("FIX supported.");
        }
        if (features & CIX) {
                puts("CIX supported.");
        }
        return 0;
}