SLICC 索引语法
SLICC indexing syntax
我一直在研究 Gem5 的缓存相关部分(特别是与目录相关的部分),但遇到了一些障碍。
这是 getDirectoryEntry(Addr addr)
的代码,在 src/mem/ruby/protocol/MESI_Two_Level-dir.sm:
Entry getDirectoryEntry(Addr addr), return_by_pointer="yes" {
Entry dir_entry := static_cast(Entry, "pointer", directory[addr]);
if (is_valid(dir_entry)) {
return dir_entry;
}
dir_entry := static_cast(Entry, "pointer",
directory.allocate(addr, new Entry));
return dir_entry;
}
注意函数中的第一行,其中写着 directory[addr]
。
directory
之前是这样定义的:
machine(MachineType:Directory, "MESI Two Level directory protocol")
: DirectoryMemory * directory;
...
我正在尝试理解 directory[addr]
代码的确切含义。直觉上,它可能调用了 C++ DirectoryMemory::lookup(Addr address)
方法,但我还没有找到任何支持该猜测的代码或文档。
DirectoryMemory
class没有定义索引运算符,也没有in the SLICC page on the wiki描述索引运算符。
tl;dr:索引运算符在 SLICC 中是什么意思?它是为 SLICC 代码中某处的特定对象定义的,我应该寻找什么来找到它的定义?
提前致谢!
我自己想出来了。正如我所怀疑的那样,它调用了 DirectoryMemory 中的 lookup
方法。
我一直在研究 Gem5 的缓存相关部分(特别是与目录相关的部分),但遇到了一些障碍。
这是 getDirectoryEntry(Addr addr)
的代码,在 src/mem/ruby/protocol/MESI_Two_Level-dir.sm:
Entry getDirectoryEntry(Addr addr), return_by_pointer="yes" {
Entry dir_entry := static_cast(Entry, "pointer", directory[addr]);
if (is_valid(dir_entry)) {
return dir_entry;
}
dir_entry := static_cast(Entry, "pointer",
directory.allocate(addr, new Entry));
return dir_entry;
}
注意函数中的第一行,其中写着 directory[addr]
。
directory
之前是这样定义的:
machine(MachineType:Directory, "MESI Two Level directory protocol")
: DirectoryMemory * directory;
...
我正在尝试理解 directory[addr]
代码的确切含义。直觉上,它可能调用了 C++ DirectoryMemory::lookup(Addr address)
方法,但我还没有找到任何支持该猜测的代码或文档。
DirectoryMemory
class没有定义索引运算符,也没有in the SLICC page on the wiki描述索引运算符。
tl;dr:索引运算符在 SLICC 中是什么意思?它是为 SLICC 代码中某处的特定对象定义的,我应该寻找什么来找到它的定义?
提前致谢!
我自己想出来了。正如我所怀疑的那样,它调用了 DirectoryMemory 中的 lookup
方法。