zoukankan      html  css  js  c++  java
  • Rocket

    https://mp.weixin.qq.com/s/ZsEVt1GslL7ufJdJlgpfNQ

     
    介绍AddressSet的实现。
     
     
    1. 基本定义
     
    使用base/mask定义的一个地址集合,之所以用集合(Set)而不是范围(Range),因为范围一般情况下是指一个连续的范围,而base/mask定义的可以是多个连续的范围,比如上面例子中的e.g: base=0x1000, mask=0xf0f decribes a device managing 0x1000-0x100f, 0x1100-0x110f, ...。地址集合,更具有一般意义,是指地址的集合,可以是多个孤立的地址、多个不连续的地址的范围组成的地址集合。
     
    mask的意义:
    a. mask中为1的位对应的address中的位值可以变化;
    b. mask中为0的位对应的address中的位值不可以变化;
     
    限制条件为:
    a. 对齐:mask中为1的位,在base中的值必须为0;
    b. base需要大于0;
     
    2. contains
     
    this contains x,this包含x。
     
    3. legalize
     
    让x中的值落在this的集合中。
     
    4. overlaps
     
    判断是否重叠:mask之外的位都相同。
    a. mask之外的位的值不可变,如果有一位不同,则地址不会相同;
    b. 如果mask之外的位都相同,mask之中的位的值是可以变化的,变化之后会存在相同的情况;
     
    5. alignment
     
    对齐字节数。
     
    6. contiguous
     
    地址集合中的地址是否是连续的。比如:
     
    7. finite
     
    mask的类型为BigInt。相较于int类型使用32位表示,long类型使用64位表示,BigInt类型的数字位数是不确定的,根据需要而拓展位宽。
     
    负数的高位全都是1,并且可以无限的填充1而不改变其值,如:
    a. 8位的-2为0b1111_1110;
    b. 16位的-2为0b1111_1111_1111_1110;
     
    所以如果mask是负数,那么他包含多少个为1的位实际上是不确定的,或者说可以是无限的。
     
    8. max
     
    最大地址。
     
    9. widen
     
    把imask加入到当前地址的mask中。
     
    10. intersect
     
    求交集。
     
    11. subtract
     
    从this中排除也包含在x中的地址。
     
    12. compare
     
    排序时使用。
     
    13. 伴生对象
     
    1) everything
     
    全部地址,mask中包含所有位:val everything = AddressSet(0, -1)
     
    2) misaligned
     
    一般情况下,是base每次增加alignment数量的地址,直到地址的数量达到size个位置。
     
    3) unify
     
    把seq中的AddressSet合并到尽量少的AddressSet中。
     
    4) enumerateMask
     
     
    5) enumerateBits
     
  • 相关阅读:
    2020.10.10收获(动手动脑三)
    2020.10.8收获
    2020.10.4收获
    2020.10.11收获
    2020.10.6收获
    2020.10.7收获(动手动脑二)
    2020.10.9收获
    2020.10.3收获
    2020.10.2收获
    2020.10.5收获
  • 原文地址:https://www.cnblogs.com/wjcdx/p/10704887.html
Copyright © 2011-2022 走看看