mirror of
				https://github.com/qemu/qemu.git
				synced 2025-10-31 12:07:31 +00:00 
			
		
		
		
	target/arm: Implement v8M VLLDM and VLSTM
For v8M the instructions VLLDM and VLSTM support lazy saving and restoring of the secure floating-point registers. Even if the floating point extension is not implemented, these instructions must act as NOPs in Secure state, so they can be used as part of the secure-to-nonsecure call sequence. Fixes: https://bugs.launchpad.net/qemu/+bug/1768295 Cc: qemu-stable@nongnu.org Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Message-id: 20180503105730.5958-1-peter.maydell@linaro.org
This commit is contained in:
		
							parent
							
								
									a82929a251
								
							
						
					
					
						commit
						b1e5336a98
					
				| @ -10795,8 +10795,23 @@ static void disas_thumb2_insn(DisasContext *s, uint32_t insn) | ||||
|         /* Coprocessor.  */ | ||||
|         if (arm_dc_feature(s, ARM_FEATURE_M)) { | ||||
|             /* We don't currently implement M profile FP support,
 | ||||
|              * so this entire space should give a NOCP fault. | ||||
|              * so this entire space should give a NOCP fault, with | ||||
|              * the exception of the v8M VLLDM and VLSTM insns, which | ||||
|              * must be NOPs in Secure state and UNDEF in Nonsecure state. | ||||
|              */ | ||||
|             if (arm_dc_feature(s, ARM_FEATURE_V8) && | ||||
|                 (insn & 0xffa00f00) == 0xec200a00) { | ||||
|                 /* 0b1110_1100_0x1x_xxxx_xxxx_1010_xxxx_xxxx
 | ||||
|                  *  - VLLDM, VLSTM | ||||
|                  * We choose to UNDEF if the RAZ bits are non-zero. | ||||
|                  */ | ||||
|                 if (!s->v8m_secure || (insn & 0x0040f0ff)) { | ||||
|                     goto illegal_op; | ||||
|                 } | ||||
|                 /* Just NOP since FP support is not implemented */ | ||||
|                 break; | ||||
|             } | ||||
|             /* All other insns: NOCP */ | ||||
|             gen_exception_insn(s, 4, EXCP_NOCP, syn_uncategorized(), | ||||
|                                default_exception_el(s)); | ||||
|             break; | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Peter Maydell
						Peter Maydell