INSN_TESTS = clc clcle cvb cvd icm lpr tcxb lam_stam xc mvst add sub mul \
and or xor insert div srst fold_And16 flogr sub_EI add_EI \
and_EI or_EI xor_EI insert_EI mul_GE add_GE condloadstore \
- op_exception fgx stck stckf stcke
+ op_exception fgx stck stckf stcke stfle
check_PROGRAMS = $(INSN_TESTS) \
ex_sig \
--- /dev/null
+#include <stdio.h>
+
+/* Number of double words needed to store all facility bits. */
+#define S390_NUM_FACILITY_DW 2
+
+
+unsigned long long stfle(unsigned long dw, unsigned bit_to_test)
+{
+ unsigned long long hoststfle[S390_NUM_FACILITY_DW], match;
+ register unsigned long long __nr asm("0") = dw - 1;
+ int cc;
+
+ asm volatile(" .insn s,0xb2b00000,%0 \n" /* stfle */
+ "ipm %2\n"
+ "srl %2,28\n"
+ : "=m" (*hoststfle), "+d" (__nr), "=d" (cc) : : "cc", "memory");
+
+ printf("the value of cc is %d and #double words is %llu\n", cc, __nr + 1);
+ if (bit_to_test < 64)
+ match = (hoststfle[0] & (1ULL << (63 - bit_to_test)));
+ else if (bit_to_test < 128)
+ match = (hoststfle[1] & (1ULL << (63 - bit_to_test)));
+ else
+ printf("code needs to be updated\n");
+
+ return match;
+}
+
+int main()
+{
+ int dw = S390_NUM_FACILITY_DW;
+
+ /* Test #1: Make sure STFLE returns sensible values. z/Arch facilities
+ must be present. */
+ if ((stfle(dw, 1)) && stfle(dw, 2))
+ printf("The z/Architecture architectural mode is installed and active\n");
+ else
+ printf("The z/Architecture architectural mode is not installed\n");
+
+ /* Test #2: Make sure the STFLE is supported. */
+ if (stfle(dw, 7))
+ printf("STFLE facility is installed\n");
+ else
+ printf("STFLE facility is not installed\n");
+
+ /* Test #3: Tell STFLE to only write 1 DW of facility bits. Expected condition
+ code should be 3 because this test is run on those machines only
+ that need 2 do double words to store facility bits. */
+ dw = 1;
+ if ((stfle(dw, 1)) && stfle(dw, 2))
+ printf("The z/Architecture architectural mode is installed and active\n");
+ else
+ printf("The z/Architecture architectural mode is not installed\n");
+
+ return 0;
+}
--- /dev/null
+the value of cc is 0 and #double words is 2
+the value of cc is 0 and #double words is 2
+The z/Architecture architectural mode is installed and active
+the value of cc is 0 and #double words is 2
+STFLE facility is installed
+the value of cc is 3 and #double words is 2
+the value of cc is 3 and #double words is 2
+The z/Architecture architectural mode is installed and active