Describir: TriCheck: Memory Model Verification at the Trisection of Software, Hardware, and ISA