mirror of
				https://git.suyu.dev/suyu/suyu
				synced 2025-11-03 16:39:01 -06:00 
			
		
		
		
	glasm: Use BitField instead of C bitfields
This commit is contained in:
		@@ -68,11 +68,11 @@ Id RegAlloc::Alloc() {
 | 
			
		||||
        }
 | 
			
		||||
        num_used_registers = std::max(num_used_registers, reg + 1);
 | 
			
		||||
        register_use[reg] = true;
 | 
			
		||||
        return Id{
 | 
			
		||||
            .index = static_cast<u32>(reg),
 | 
			
		||||
            .is_spill = 0,
 | 
			
		||||
            .is_condition_code = 0,
 | 
			
		||||
        };
 | 
			
		||||
        Id ret{};
 | 
			
		||||
        ret.index.Assign(static_cast<u32>(reg));
 | 
			
		||||
        ret.is_spill.Assign(0);
 | 
			
		||||
        ret.is_condition_code.Assign(0);
 | 
			
		||||
        return ret;
 | 
			
		||||
    }
 | 
			
		||||
    throw NotImplementedException("Register spilling");
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -6,6 +6,7 @@
 | 
			
		||||
 | 
			
		||||
#include <bitset>
 | 
			
		||||
 | 
			
		||||
#include "common/bit_field.h"
 | 
			
		||||
#include "common/common_types.h"
 | 
			
		||||
 | 
			
		||||
namespace Shader::IR {
 | 
			
		||||
@@ -18,9 +19,12 @@ namespace Shader::Backend::GLASM {
 | 
			
		||||
class EmitContext;
 | 
			
		||||
 | 
			
		||||
struct Id {
 | 
			
		||||
    u32 index : 30;
 | 
			
		||||
    u32 is_spill : 1;
 | 
			
		||||
    u32 is_condition_code : 1;
 | 
			
		||||
    union {
 | 
			
		||||
        u32 raw;
 | 
			
		||||
        BitField<0, 30, u32> index;
 | 
			
		||||
        BitField<30, 1, u32> is_spill;
 | 
			
		||||
        BitField<31, 1, u32> is_condition_code;
 | 
			
		||||
    };
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
class RegAlloc {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user