检测龙芯 2K1000B 对 MIPS SIMD 的支持
本帖最后由 brep 于 2018-6-12 22:07 编辑根据《MIPS® Architecture for Programmers Volume IV-j: The MIPS64® SIMD Architecture Module》的说明,Config3 (CP0 Register 16, Select 3) 的Bit28是 MSA 实现的存在位,如果此位为1,则说明CPU中存在MSA实现,如果为0,则说明CPU没有实现MSA,这个位是由硬件设置的只读位;Config5 (CP0 Register 16, Select 5) 的Bit27是MSA使能位,这个位是可读写的,如果将此位置1,则启用MSA,置0,则关闭MSA。
为此编写下列程序,对龙芯派上的2K1000B CPU进行检测,看看它是否支持MSA,是否启用了MSA,源程序msa.c内容如下:
#include <linux/init.h>
#include <linux/module.h>
MODULE_LICENSE("GPL");
static int msa_init(void)
{
int msap;
int msaen;
asm (
"mfc0 %, $16, 3\n\t"
"mfc0 %, $16, 5\n\t"
: "=r" (msap), "=r" (msaen)
);
printk(KERN_ALERT "msap=0x%X msaen=0x%X\n", msap, msaen);
return 0;
}
static void msa_exit(void)
{
printk(KERN_ALERT "msa exit\n");
}
module_init(msa_init);
module_exit(msa_exit);
Makefile 内容如下:
MODDIR ?= /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
obj-m += msa.o
modules:
$(MAKE) -C $(MODDIR) M=$(PWD) modules
clean:
rm -rf *.o *.ko *.cmd *.mod.* Module.symvers modules.order
.PHONY: modules
执行结果如下:
$ make
$ sudo insmod msa.ko
$ sudo rmmod msa.ko
$ sudo dmesg | tail -n2
[ 8958.777343] msap=0xD00030A0 msaen=0x0
[ 8968.417968] msa exit
$由执行结果可知,MSA存在位为1,因此龙芯派的2K1000B实现了MSA,而MSA使能位为0,因此默认情况下,2K1000B的MSA并未启用。
酷
页:
[1]