From 61f35e0a87209908e8f6ac4e10ed03e0b334ef12 Mon Sep 17 00:00:00 2001 From: Luke Kenneth Casson Leighton Date: Thu, 10 Jan 2019 11:57:19 +0000 Subject: [PATCH] add branch speculation image --- 3d_gpu/requirements_specification.mdwn | 5 +++++ 3d_gpu/shadow_issue_flipflops.png | Bin 0 -> 16357 bytes 2 files changed, 5 insertions(+) create mode 100644 3d_gpu/shadow_issue_flipflops.png diff --git a/3d_gpu/requirements_specification.mdwn b/3d_gpu/requirements_specification.mdwn index 4340a4cf5..611bf740e 100644 --- a/3d_gpu/requirements_specification.mdwn +++ b/3d_gpu/requirements_specification.mdwn @@ -161,3 +161,8 @@ and may only occur if the Function Unit is entirely free of write hazards. The Function-Unit to Function-Unit Dependency Matrix expresses the read and write hazards - dependencies - between Function Units. + +## Branch Speculation + +![shadow branch][shadow_issue_flipflops.png] + diff --git a/3d_gpu/shadow_issue_flipflops.png b/3d_gpu/shadow_issue_flipflops.png new file mode 100644 index 0000000000000000000000000000000000000000..108f832951a689851173477f380ee9fba652c51c GIT binary patch literal 16357 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

T1+rI@LYO0B_1xyB`otZo301?$Zps#C-^$Py?Pr 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