mirror of
				https://github.com/TomHarte/CLK.git
				synced 2025-11-04 00:16:26 +00:00 
			
		
		
		
	Avoid expensive path for 8088; pull out allow list.
This commit is contained in:
		@@ -130,6 +130,7 @@ void stos(
 | 
				
			|||||||
		return;
 | 
							return;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if constexpr (uses_8086_exceptions(ContextT::model)) {
 | 
				
			||||||
		try {
 | 
							try {
 | 
				
			||||||
			context.memory.template access<IntT, AccessType::Write>(Source::ES, eDI) = eAX;
 | 
								context.memory.template access<IntT, AccessType::Write>(Source::ES, eDI) = eAX;
 | 
				
			||||||
		} catch (const Exception &e) {
 | 
							} catch (const Exception &e) {
 | 
				
			||||||
@@ -145,6 +146,9 @@ void stos(
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
			throw e;
 | 
								throw e;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							context.memory.template access<IntT, AccessType::Write>(Source::ES, eDI) = eAX;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	eDI += context.flags.template direction<AddressT>() * sizeof(IntT);
 | 
						eDI += context.flags.template direction<AddressT>() * sizeof(IntT);
 | 
				
			||||||
	repeat<AddressT, repetition>(eCX, context);
 | 
						repeat<AddressT, repetition>(eCX, context);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -31,6 +31,61 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
namespace {
 | 
					namespace {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					NSSet *const allowList = [NSSet setWithArray:@[
 | 
				
			||||||
 | 
						// Current execution failures, albeit all permitted:
 | 
				
			||||||
 | 
					//		@"D4.json.gz",		// AAM
 | 
				
			||||||
 | 
					//		@"F6.7.json.gz",	// IDIV byte
 | 
				
			||||||
 | 
					//		@"F7.7.json.gz",	// IDIV word
 | 
				
			||||||
 | 
					//		@"00.json.gz",
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//		@"2F.json.gz",		// DAS
 | 
				
			||||||
 | 
					//		@"60.json.gz",		// PUSHA
 | 
				
			||||||
 | 
					//		@"61.json.gz",		// POPA
 | 
				
			||||||
 | 
					//		@"62.json.gz",		// BOUND and (bad) mix
 | 
				
			||||||
 | 
					//		@"69.json.gz",		// IMUL
 | 
				
			||||||
 | 
					//		@"6D.json.gz",		// INS.W
 | 
				
			||||||
 | 
					//		@"6F.json.gz",		// OUTS.W
 | 
				
			||||||
 | 
					//		@"81.0.json.gz",	// ADD
 | 
				
			||||||
 | 
					//		@"81.1.json.gz",	// OR
 | 
				
			||||||
 | 
					//		@"81.2.json.gz",	// ADC
 | 
				
			||||||
 | 
					//		@"81.3.json.gz",	// SBB
 | 
				
			||||||
 | 
					//		@"81.4.json.gz",
 | 
				
			||||||
 | 
					//		@"81.5.json.gz",
 | 
				
			||||||
 | 
					//		@"81.6.json.gz",
 | 
				
			||||||
 | 
					//		@"81.7.json.gz",
 | 
				
			||||||
 | 
					//		@"9A.json.gz",		// CALL
 | 
				
			||||||
 | 
					//		@"9C.json.gz",
 | 
				
			||||||
 | 
							@"A5.json.gz",		// MOVS
 | 
				
			||||||
 | 
					//		@"A7.json.gz",
 | 
				
			||||||
 | 
					//		@"AD.json.gz",
 | 
				
			||||||
 | 
					//		@"AF.json.gz",
 | 
				
			||||||
 | 
					//		@"C0.2.json.gz",
 | 
				
			||||||
 | 
					//		@"C0.3.json.gz",
 | 
				
			||||||
 | 
					//		@"C0.5.json.gz",
 | 
				
			||||||
 | 
					//		@"C0.6.json.gz",
 | 
				
			||||||
 | 
					//		@"C1.6.json.gz",
 | 
				
			||||||
 | 
					//		@"C6.json.gz",
 | 
				
			||||||
 | 
					//		@"C7.json.gz",
 | 
				
			||||||
 | 
					//		@"C8.json.gz",		// ENTER
 | 
				
			||||||
 | 
					//		@"C9.json.gz",
 | 
				
			||||||
 | 
					//		@"CC.json.gz",
 | 
				
			||||||
 | 
					//		@"CD.json.gz",
 | 
				
			||||||
 | 
					//		@"CE.json.gz",
 | 
				
			||||||
 | 
					//		@"D0.6.json.gz",
 | 
				
			||||||
 | 
					//		@"D1.6.json.gz",
 | 
				
			||||||
 | 
					//		@"D2.6.json.gz",
 | 
				
			||||||
 | 
					//		@"D3.6.json.gz",
 | 
				
			||||||
 | 
					//		@"D8.json.gz",		// Various floating poing
 | 
				
			||||||
 | 
					//		@"EA.json.gz",		// JMP aa:bb
 | 
				
			||||||
 | 
					//		@"F4.json.gz",		// HLT
 | 
				
			||||||
 | 
					//		@"F6.1.json.gz",	// IDIV
 | 
				
			||||||
 | 
					//		@"F6.7.json.gz",	// IDIV
 | 
				
			||||||
 | 
					//		@"F7.0.json.gz",	// TEST
 | 
				
			||||||
 | 
					//		@"F7.1.json.gz",	// TEST
 | 
				
			||||||
 | 
					//		@"FF.3.json.gz",	// CALL far, plus unrecognised (bad)s?
 | 
				
			||||||
 | 
					//		@"FF.5.json.gz",
 | 
				
			||||||
 | 
					]];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// MARK: - Test paths
 | 
					// MARK: - Test paths
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// The tests themselves are not duplicated in this repository;
 | 
					// The tests themselves are not duplicated in this repository;
 | 
				
			||||||
@@ -262,61 +317,6 @@ std::vector<uint8_t> bytes(NSArray<NSNumber *> *encoding) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
NSArray<NSString *> *test_files(const char *const home) {
 | 
					NSArray<NSString *> *test_files(const char *const home) {
 | 
				
			||||||
	NSString *const path = [NSString stringWithUTF8String:home];
 | 
						NSString *const path = [NSString stringWithUTF8String:home];
 | 
				
			||||||
	NSSet *const allowList = [NSSet setWithArray:@[
 | 
					 | 
				
			||||||
		// Current execution failures, albeit all permitted:
 | 
					 | 
				
			||||||
//		@"D4.json.gz",		// AAM
 | 
					 | 
				
			||||||
//		@"F6.7.json.gz",	// IDIV byte
 | 
					 | 
				
			||||||
//		@"F7.7.json.gz",	// IDIV word
 | 
					 | 
				
			||||||
//		@"00.json.gz",
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
//		@"2F.json.gz",		// DAS
 | 
					 | 
				
			||||||
//		@"60.json.gz",		// PUSHA
 | 
					 | 
				
			||||||
//		@"61.json.gz",		// POPA
 | 
					 | 
				
			||||||
//		@"62.json.gz",		// BOUND and (bad) mix
 | 
					 | 
				
			||||||
//		@"69.json.gz",		// IMUL
 | 
					 | 
				
			||||||
//		@"6D.json.gz",		// INS.W
 | 
					 | 
				
			||||||
//		@"6F.json.gz",		// OUTS.W
 | 
					 | 
				
			||||||
//		@"81.0.json.gz",	// ADD
 | 
					 | 
				
			||||||
//		@"81.1.json.gz",	// OR
 | 
					 | 
				
			||||||
//		@"81.2.json.gz",	// ADC
 | 
					 | 
				
			||||||
//		@"81.3.json.gz",	// SBB
 | 
					 | 
				
			||||||
//		@"81.4.json.gz",
 | 
					 | 
				
			||||||
//		@"81.5.json.gz",
 | 
					 | 
				
			||||||
//		@"81.6.json.gz",
 | 
					 | 
				
			||||||
//		@"81.7.json.gz",
 | 
					 | 
				
			||||||
//		@"9A.json.gz",		// CALL
 | 
					 | 
				
			||||||
//		@"9C.json.gz",
 | 
					 | 
				
			||||||
//		@"A5.json.gz",
 | 
					 | 
				
			||||||
//		@"A7.json.gz",
 | 
					 | 
				
			||||||
//		@"AD.json.gz",
 | 
					 | 
				
			||||||
//		@"AF.json.gz",
 | 
					 | 
				
			||||||
//		@"C0.2.json.gz",
 | 
					 | 
				
			||||||
//		@"C0.3.json.gz",
 | 
					 | 
				
			||||||
//		@"C0.5.json.gz",
 | 
					 | 
				
			||||||
//		@"C0.6.json.gz",
 | 
					 | 
				
			||||||
//		@"C1.6.json.gz",
 | 
					 | 
				
			||||||
//		@"C6.json.gz",
 | 
					 | 
				
			||||||
//		@"C7.json.gz",
 | 
					 | 
				
			||||||
//		@"C8.json.gz",		// ENTER
 | 
					 | 
				
			||||||
//		@"C9.json.gz",
 | 
					 | 
				
			||||||
//		@"CC.json.gz",
 | 
					 | 
				
			||||||
//		@"CD.json.gz",
 | 
					 | 
				
			||||||
//		@"CE.json.gz",
 | 
					 | 
				
			||||||
//		@"D0.6.json.gz",
 | 
					 | 
				
			||||||
//		@"D1.6.json.gz",
 | 
					 | 
				
			||||||
//		@"D2.6.json.gz",
 | 
					 | 
				
			||||||
//		@"D3.6.json.gz",
 | 
					 | 
				
			||||||
//		@"D8.json.gz",		// Various floating poing
 | 
					 | 
				
			||||||
//		@"EA.json.gz",		// JMP aa:bb
 | 
					 | 
				
			||||||
//		@"F4.json.gz",		// HLT
 | 
					 | 
				
			||||||
//		@"F6.1.json.gz",	// IDIV
 | 
					 | 
				
			||||||
//		@"F6.7.json.gz",	// IDIV
 | 
					 | 
				
			||||||
//		@"F7.0.json.gz",	// TEST
 | 
					 | 
				
			||||||
//		@"F7.1.json.gz",	// TEST
 | 
					 | 
				
			||||||
//		@"FF.3.json.gz",	// CALL far, plus unrecognised (bad)s?
 | 
					 | 
				
			||||||
//		@"FF.5.json.gz",
 | 
					 | 
				
			||||||
	]];
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	NSSet *ignoreList = nil;
 | 
						NSSet *ignoreList = nil;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	NSArray<NSString *> *files = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:path error:nil];
 | 
						NSArray<NSString *> *files = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:path error:nil];
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user