arch/arm/nwfpe/extended_cpdo.c

Source file repositories/reference/linux-study-clean/arch/arm/nwfpe/extended_cpdo.c

File Facts

System
Linux kernel
Corpus path
arch/arm/nwfpe/extended_cpdo.c
Extension
.c
Size
3476 bytes
Lines
143
Domain
Architecture Layer
Bucket
arch/arm
Inferred role
Architecture Layer: implementation source
Status
source implementation candidate

Why This File Exists

CPU and platform-specific kernel glue: boot entry, traps, syscall entry, interrupts, page tables, context switch, and low-level barriers.

Dependency Surface

Detected Declarations

Annotated Snippet

switch (fpa11->fType[Fm]) {
		case typeSingle:
			rFm = float32_to_floatx80(fpa11->fpreg[Fm].fSingle);
			break;

		case typeDouble:
			rFm = float64_to_floatx80(fpa11->fpreg[Fm].fDouble);
			break;

		case typeExtended:
			rFm = fpa11->fpreg[Fm].fExtended;
			break;

		default:
			return 0;
		}
	}

	opc_mask_shift = (opcode & MASK_ARITHMETIC_OPCODE) >> 20;
	if (!MONADIC_INSTRUCTION(opcode)) {
		unsigned int Fn = getFn(opcode);
		floatx80 rFn;

		switch (fpa11->fType[Fn]) {
		case typeSingle:
			rFn = float32_to_floatx80(fpa11->fpreg[Fn].fSingle);
			break;

		case typeDouble:
			rFn = float64_to_floatx80(fpa11->fpreg[Fn].fDouble);
			break;

		case typeExtended:
			rFn = fpa11->fpreg[Fn].fExtended;
			break;

		default:
			return 0;
		}

		if (dyadic_extended[opc_mask_shift]) {
			rFd->fExtended = dyadic_extended[opc_mask_shift](roundData, rFn, rFm);
		} else {
			return 0;
		}
	} else {
		if (monadic_extended[opc_mask_shift]) {
			rFd->fExtended = monadic_extended[opc_mask_shift](roundData, rFm);
		} else {
			return 0;
		}
	}

	return 1;
}

Annotation

Implementation Notes