示例#1
0
const char* CParser::ParseMaskedDstRegExt(const char *token,struct nvfx_insn *insn)
{
	token = ParseOutputMask(token,&insn->mask);
	if(token && *token!='\0') {
		if(token[0]=='(') {
			token = ParseCond(&token[1],insn);
			token++;
		}
	}
	return token;
}
示例#2
0
void CFPParser::ParseInstruction(struct nvfx_insn *insn,opcode *opc,const char *param_str)
{
	char *token = SkipSpaces(strtok((char*)param_str,","));

	insn->precision = opc->suffixes&(_R|_H|_X);
	insn->sat = ((opc->suffixes&_S) ? TRUE : FALSE);
	insn->cc_update = ((opc->suffixes&_C) ? TRUE : FALSE);

	if(opc->outputs==OUTPUT_S || opc->outputs==OUTPUT_V) {
		ParseMaskedDstReg(token,insn);
	}

	if(opc->outputs!=OUTPUT_NONE && opc->inputs!=INPUT_NONE) {
		token = SkipSpaces(strtok(NULL,","));
	}

	if(opc->inputs==INPUT_1V) {
		ParseVectorSrc(token,&insn->src[0]);
	} else if(opc->inputs==INPUT_2V) {
		ParseVectorSrc(token,&insn->src[0]);

		token = SkipSpaces(strtok(NULL,","));
		ParseVectorSrc(token,&insn->src[1]);
	} else if(opc->inputs==INPUT_3V) {
		ParseVectorSrc(token,&insn->src[0]);

		token = SkipSpaces(strtok(NULL,","));
		ParseVectorSrc(token,&insn->src[1]);

		token = SkipSpaces(strtok(NULL,","));
		ParseVectorSrc(token,&insn->src[2]);
	} else if(opc->inputs==INPUT_1S) {
		ParseScalarSrc(token,&insn->src[0]);
	} else if(opc->inputs==INPUT_2S) {
		ParseScalarSrc(token,&insn->src[0]);

		token = SkipSpaces(strtok(NULL,","));
		ParseScalarSrc(token,&insn->src[1]);
	} else if(opc->inputs==INPUT_1V_T) {
		u8 unit,target;

		ParseVectorSrc(token,&insn->src[0]);

		token = SkipSpaces(strtok(NULL,","));
		ParseTextureUnit(token,&unit);

		token = SkipSpaces(strtok(NULL,","));
		ParseTextureTarget(token,&target);

		insn->unit = unit;
	} else if(opc->inputs==INPUT_3V_T) {
		u8 unit,target;

		ParseVectorSrc(token,&insn->src[0]);

		token = SkipSpaces(strtok(NULL,","));
		ParseVectorSrc(token,&insn->src[1]);

		token = SkipSpaces(strtok(NULL,","));
		ParseVectorSrc(token,&insn->src[2]);

		token = SkipSpaces(strtok(NULL,","));
		ParseTextureUnit(token,&unit);

		token = SkipSpaces(strtok(NULL,","));
		ParseTextureTarget(token,&target);

		insn->unit = unit;
	} else if(opc->inputs==INPUT_CC) {
		ParseCond(token,insn);
	}
}