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) 方法,但我还没有找到任何支持该猜测的代码或文档。

DirectoryMemoryclass没有定义索引运算符,也没有in the SLICC page on the wiki描述索引运算符。

tl;dr:索引运算符在 SLICC 中是什么意思?它是为 SLICC 代码中某处的特定对象定义的,我应该寻找什么来找到它的定义?

提前致谢!

我自己想出来了。正如我所怀疑的那样,它调用了 DirectoryMemory 中的 lookup 方法。