From 966894c5ae4b1b90e3667ca3e83a53efe23715d8 Mon Sep 17 00:00:00 2001 From: Khyber Sen Date: Wed, 23 Aug 2023 23:12:07 -0700 Subject: [PATCH 1/8] `fn init_edges`: Make local `fn` non-`extern "C"`. --- src/intra_edge.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/intra_edge.rs b/src/intra_edge.rs index 6054abb8c..ea7c90571 100644 --- a/src/intra_edge.rs +++ b/src/intra_edge.rs @@ -45,7 +45,8 @@ use crate::src::levels::BL_64X64; use crate::src::levels::BL_128X128; use crate::src::levels::BL_16X16; use crate::src::levels::BL_8X8; -unsafe extern "C" fn init_edges(node: *mut EdgeNode, bl: BlockLevel, edge_flags: EdgeFlags) { + +unsafe fn init_edges(node: *mut EdgeNode, bl: BlockLevel, edge_flags: EdgeFlags) { (*node).o = edge_flags; if bl as libc::c_uint == BL_8X8 as libc::c_int as libc::c_uint { let nt: *mut EdgeTip = node as *mut EdgeTip; From f75087d6fa7a99b7aedcd93e5300f94002b7b64a Mon Sep 17 00:00:00 2001 From: Khyber Sen Date: Thu, 24 Aug 2023 10:02:05 -0700 Subject: [PATCH 2/8] `fn init_edges`: Remove redundant `as` casts. --- src/intra_edge.rs | 211 +++++++++++++++------------------------------- 1 file changed, 67 insertions(+), 144 deletions(-) diff --git a/src/intra_edge.rs b/src/intra_edge.rs index ea7c90571..46b0e76b8 100644 --- a/src/intra_edge.rs +++ b/src/intra_edge.rs @@ -48,161 +48,84 @@ use crate::src::levels::BL_8X8; unsafe fn init_edges(node: *mut EdgeNode, bl: BlockLevel, edge_flags: EdgeFlags) { (*node).o = edge_flags; - if bl as libc::c_uint == BL_8X8 as libc::c_int as libc::c_uint { + if bl == BL_8X8 { let nt: *mut EdgeTip = node as *mut EdgeTip; - (*node).h[0] = (edge_flags as libc::c_uint - | (EDGE_I444_LEFT_HAS_BOTTOM as libc::c_int - | EDGE_I422_LEFT_HAS_BOTTOM as libc::c_int - | EDGE_I420_LEFT_HAS_BOTTOM as libc::c_int) as libc::c_uint) - as EdgeFlags; - (*node).h[1] = (edge_flags as libc::c_uint - & (EDGE_I444_LEFT_HAS_BOTTOM as libc::c_int - | EDGE_I422_LEFT_HAS_BOTTOM as libc::c_int - | EDGE_I420_LEFT_HAS_BOTTOM as libc::c_int - | EDGE_I420_TOP_HAS_RIGHT as libc::c_int) as libc::c_uint) - as EdgeFlags; - (*node).v[0] = (edge_flags as libc::c_uint - | (EDGE_I444_TOP_HAS_RIGHT as libc::c_int - | EDGE_I422_TOP_HAS_RIGHT as libc::c_int - | EDGE_I420_TOP_HAS_RIGHT as libc::c_int) as libc::c_uint) - as EdgeFlags; - (*node).v[1] = (edge_flags as libc::c_uint - & (EDGE_I444_TOP_HAS_RIGHT as libc::c_int - | EDGE_I422_TOP_HAS_RIGHT as libc::c_int - | EDGE_I420_TOP_HAS_RIGHT as libc::c_int - | EDGE_I420_LEFT_HAS_BOTTOM as libc::c_int - | EDGE_I422_LEFT_HAS_BOTTOM as libc::c_int) as libc::c_uint) - as EdgeFlags; - (*nt).split[0] = (EDGE_I444_TOP_HAS_RIGHT as libc::c_int - | EDGE_I422_TOP_HAS_RIGHT as libc::c_int - | EDGE_I420_TOP_HAS_RIGHT as libc::c_int - | (EDGE_I444_LEFT_HAS_BOTTOM as libc::c_int - | EDGE_I422_LEFT_HAS_BOTTOM as libc::c_int - | EDGE_I420_LEFT_HAS_BOTTOM as libc::c_int)) as EdgeFlags; - (*nt).split[1] = (edge_flags as libc::c_uint - & (EDGE_I444_TOP_HAS_RIGHT as libc::c_int - | EDGE_I422_TOP_HAS_RIGHT as libc::c_int - | EDGE_I420_TOP_HAS_RIGHT as libc::c_int) as libc::c_uint - | EDGE_I422_LEFT_HAS_BOTTOM as libc::c_int as libc::c_uint) - as EdgeFlags; - (*nt).split[2] = (edge_flags as libc::c_uint - | EDGE_I444_TOP_HAS_RIGHT as libc::c_int as libc::c_uint) - as EdgeFlags; - (*nt).split[3] = (edge_flags as libc::c_uint - & (EDGE_I420_TOP_HAS_RIGHT as libc::c_int - | EDGE_I420_LEFT_HAS_BOTTOM as libc::c_int - | EDGE_I422_LEFT_HAS_BOTTOM as libc::c_int) as libc::c_uint) - as EdgeFlags; + (*node).h[0] = edge_flags + | (EDGE_I444_LEFT_HAS_BOTTOM | EDGE_I422_LEFT_HAS_BOTTOM | EDGE_I420_LEFT_HAS_BOTTOM); + (*node).h[1] = edge_flags + & ((EDGE_I444_LEFT_HAS_BOTTOM | EDGE_I422_LEFT_HAS_BOTTOM | EDGE_I420_LEFT_HAS_BOTTOM) + | EDGE_I420_TOP_HAS_RIGHT); + (*node).v[0] = edge_flags + | (EDGE_I444_TOP_HAS_RIGHT | EDGE_I422_TOP_HAS_RIGHT | EDGE_I420_TOP_HAS_RIGHT); + (*node).v[1] = edge_flags + & ((EDGE_I444_TOP_HAS_RIGHT | EDGE_I422_TOP_HAS_RIGHT | EDGE_I420_TOP_HAS_RIGHT) + | EDGE_I420_LEFT_HAS_BOTTOM + | EDGE_I422_LEFT_HAS_BOTTOM); + (*nt).split[0] = (EDGE_I444_TOP_HAS_RIGHT + | EDGE_I422_TOP_HAS_RIGHT + | EDGE_I420_TOP_HAS_RIGHT) + | (EDGE_I444_LEFT_HAS_BOTTOM | EDGE_I422_LEFT_HAS_BOTTOM | EDGE_I420_LEFT_HAS_BOTTOM); + (*nt).split[1] = (edge_flags + & (EDGE_I444_TOP_HAS_RIGHT | EDGE_I422_TOP_HAS_RIGHT | EDGE_I420_TOP_HAS_RIGHT)) + | EDGE_I422_LEFT_HAS_BOTTOM; + (*nt).split[2] = edge_flags | EDGE_I444_TOP_HAS_RIGHT; + (*nt).split[3] = edge_flags + & (EDGE_I420_TOP_HAS_RIGHT | EDGE_I420_LEFT_HAS_BOTTOM | EDGE_I422_LEFT_HAS_BOTTOM); } else { let nwc: *mut EdgeBranch = node as *mut EdgeBranch; - (*node).h[0] = (edge_flags as libc::c_uint - | (EDGE_I444_LEFT_HAS_BOTTOM as libc::c_int - | EDGE_I422_LEFT_HAS_BOTTOM as libc::c_int - | EDGE_I420_LEFT_HAS_BOTTOM as libc::c_int) as libc::c_uint) - as EdgeFlags; - (*node).h[1] = (edge_flags as libc::c_uint - & (EDGE_I444_LEFT_HAS_BOTTOM as libc::c_int - | EDGE_I422_LEFT_HAS_BOTTOM as libc::c_int - | EDGE_I420_LEFT_HAS_BOTTOM as libc::c_int) as libc::c_uint) - as EdgeFlags; - (*node).v[0] = (edge_flags as libc::c_uint - | (EDGE_I444_TOP_HAS_RIGHT as libc::c_int - | EDGE_I422_TOP_HAS_RIGHT as libc::c_int - | EDGE_I420_TOP_HAS_RIGHT as libc::c_int) as libc::c_uint) - as EdgeFlags; - (*node).v[1] = (edge_flags as libc::c_uint - & (EDGE_I444_TOP_HAS_RIGHT as libc::c_int - | EDGE_I422_TOP_HAS_RIGHT as libc::c_int - | EDGE_I420_TOP_HAS_RIGHT as libc::c_int) as libc::c_uint) - as EdgeFlags; - (*nwc).h4[0] = (edge_flags as libc::c_uint - | (EDGE_I444_LEFT_HAS_BOTTOM as libc::c_int - | EDGE_I422_LEFT_HAS_BOTTOM as libc::c_int - | EDGE_I420_LEFT_HAS_BOTTOM as libc::c_int) as libc::c_uint) - as EdgeFlags; - (*nwc).h4[2] = (EDGE_I444_LEFT_HAS_BOTTOM as libc::c_int - | EDGE_I422_LEFT_HAS_BOTTOM as libc::c_int - | EDGE_I420_LEFT_HAS_BOTTOM as libc::c_int) as EdgeFlags; + (*node).h[0] = edge_flags + | (EDGE_I444_LEFT_HAS_BOTTOM | EDGE_I422_LEFT_HAS_BOTTOM | EDGE_I420_LEFT_HAS_BOTTOM); + (*node).h[1] = edge_flags + & (EDGE_I444_LEFT_HAS_BOTTOM | EDGE_I422_LEFT_HAS_BOTTOM | EDGE_I420_LEFT_HAS_BOTTOM); + (*node).v[0] = edge_flags + | (EDGE_I444_TOP_HAS_RIGHT | EDGE_I422_TOP_HAS_RIGHT | EDGE_I420_TOP_HAS_RIGHT); + (*node).v[1] = edge_flags + & (EDGE_I444_TOP_HAS_RIGHT | EDGE_I422_TOP_HAS_RIGHT | EDGE_I420_TOP_HAS_RIGHT); + (*nwc).h4[0] = edge_flags + | (EDGE_I444_LEFT_HAS_BOTTOM | EDGE_I422_LEFT_HAS_BOTTOM | EDGE_I420_LEFT_HAS_BOTTOM); + (*nwc).h4[2] = + EDGE_I444_LEFT_HAS_BOTTOM | EDGE_I422_LEFT_HAS_BOTTOM | EDGE_I420_LEFT_HAS_BOTTOM; (*nwc).h4[1] = (*nwc).h4[2]; - (*nwc).h4[3] = (edge_flags as libc::c_uint - & (EDGE_I444_LEFT_HAS_BOTTOM as libc::c_int - | EDGE_I422_LEFT_HAS_BOTTOM as libc::c_int - | EDGE_I420_LEFT_HAS_BOTTOM as libc::c_int) as libc::c_uint) - as EdgeFlags; - if bl as libc::c_uint == BL_16X16 as libc::c_int as libc::c_uint { + (*nwc).h4[3] = edge_flags + & (EDGE_I444_LEFT_HAS_BOTTOM | EDGE_I422_LEFT_HAS_BOTTOM | EDGE_I420_LEFT_HAS_BOTTOM); + if bl == BL_16X16 { (*nwc).h4[1] = (*nwc).h4[1] | edge_flags & EDGE_I420_TOP_HAS_RIGHT; } - (*nwc).v4[0] = (edge_flags as libc::c_uint - | (EDGE_I444_TOP_HAS_RIGHT as libc::c_int - | EDGE_I422_TOP_HAS_RIGHT as libc::c_int - | EDGE_I420_TOP_HAS_RIGHT as libc::c_int) as libc::c_uint) - as EdgeFlags; - (*nwc).v4[2] = (EDGE_I444_TOP_HAS_RIGHT as libc::c_int - | EDGE_I422_TOP_HAS_RIGHT as libc::c_int - | EDGE_I420_TOP_HAS_RIGHT as libc::c_int) as EdgeFlags; + (*nwc).v4[0] = edge_flags + | (EDGE_I444_TOP_HAS_RIGHT | EDGE_I422_TOP_HAS_RIGHT | EDGE_I420_TOP_HAS_RIGHT); + (*nwc).v4[2] = EDGE_I444_TOP_HAS_RIGHT | EDGE_I422_TOP_HAS_RIGHT | EDGE_I420_TOP_HAS_RIGHT; (*nwc).v4[1] = (*nwc).v4[2]; - (*nwc).v4[3] = (edge_flags as libc::c_uint - & (EDGE_I444_TOP_HAS_RIGHT as libc::c_int - | EDGE_I422_TOP_HAS_RIGHT as libc::c_int - | EDGE_I420_TOP_HAS_RIGHT as libc::c_int) as libc::c_uint) - as EdgeFlags; - if bl as libc::c_uint == BL_16X16 as libc::c_int as libc::c_uint { + (*nwc).v4[3] = edge_flags + & (EDGE_I444_TOP_HAS_RIGHT | EDGE_I422_TOP_HAS_RIGHT | EDGE_I420_TOP_HAS_RIGHT); + if bl == BL_16X16 { (*nwc).v4[1] = (*nwc).v4[1] | edge_flags & (EDGE_I420_LEFT_HAS_BOTTOM | EDGE_I422_LEFT_HAS_BOTTOM); } - (*nwc).tls[0] = (EDGE_I444_TOP_HAS_RIGHT as libc::c_int - | EDGE_I422_TOP_HAS_RIGHT as libc::c_int - | EDGE_I420_TOP_HAS_RIGHT as libc::c_int - | (EDGE_I444_LEFT_HAS_BOTTOM as libc::c_int - | EDGE_I422_LEFT_HAS_BOTTOM as libc::c_int - | EDGE_I420_LEFT_HAS_BOTTOM as libc::c_int)) as EdgeFlags; - (*nwc).tls[1] = (edge_flags as libc::c_uint - & (EDGE_I444_LEFT_HAS_BOTTOM as libc::c_int - | EDGE_I422_LEFT_HAS_BOTTOM as libc::c_int - | EDGE_I420_LEFT_HAS_BOTTOM as libc::c_int) as libc::c_uint) - as EdgeFlags; - (*nwc).tls[2] = (edge_flags as libc::c_uint - & (EDGE_I444_TOP_HAS_RIGHT as libc::c_int - | EDGE_I422_TOP_HAS_RIGHT as libc::c_int - | EDGE_I420_TOP_HAS_RIGHT as libc::c_int) as libc::c_uint) - as EdgeFlags; - (*nwc).trs[0] = (edge_flags as libc::c_uint - | (EDGE_I444_TOP_HAS_RIGHT as libc::c_int - | EDGE_I422_TOP_HAS_RIGHT as libc::c_int - | EDGE_I420_TOP_HAS_RIGHT as libc::c_int) as libc::c_uint) - as EdgeFlags; - (*nwc).trs[1] = (edge_flags as libc::c_uint - | (EDGE_I444_LEFT_HAS_BOTTOM as libc::c_int - | EDGE_I422_LEFT_HAS_BOTTOM as libc::c_int - | EDGE_I420_LEFT_HAS_BOTTOM as libc::c_int) as libc::c_uint) - as EdgeFlags; + (*nwc).tls[0] = (EDGE_I444_TOP_HAS_RIGHT + | EDGE_I422_TOP_HAS_RIGHT + | EDGE_I420_TOP_HAS_RIGHT) + | (EDGE_I444_LEFT_HAS_BOTTOM | EDGE_I422_LEFT_HAS_BOTTOM | EDGE_I420_LEFT_HAS_BOTTOM); + (*nwc).tls[1] = edge_flags + & (EDGE_I444_LEFT_HAS_BOTTOM | EDGE_I422_LEFT_HAS_BOTTOM | EDGE_I420_LEFT_HAS_BOTTOM); + (*nwc).tls[2] = edge_flags + & (EDGE_I444_TOP_HAS_RIGHT | EDGE_I422_TOP_HAS_RIGHT | EDGE_I420_TOP_HAS_RIGHT); + (*nwc).trs[0] = edge_flags + | (EDGE_I444_TOP_HAS_RIGHT | EDGE_I422_TOP_HAS_RIGHT | EDGE_I420_TOP_HAS_RIGHT); + (*nwc).trs[1] = edge_flags + | (EDGE_I444_LEFT_HAS_BOTTOM | EDGE_I422_LEFT_HAS_BOTTOM | EDGE_I420_LEFT_HAS_BOTTOM); (*nwc).trs[2] = 0 as EdgeFlags; - (*nwc).tts[0] = (EDGE_I444_TOP_HAS_RIGHT as libc::c_int - | EDGE_I422_TOP_HAS_RIGHT as libc::c_int - | EDGE_I420_TOP_HAS_RIGHT as libc::c_int - | (EDGE_I444_LEFT_HAS_BOTTOM as libc::c_int - | EDGE_I422_LEFT_HAS_BOTTOM as libc::c_int - | EDGE_I420_LEFT_HAS_BOTTOM as libc::c_int)) as EdgeFlags; - (*nwc).tts[1] = (edge_flags as libc::c_uint - & (EDGE_I444_TOP_HAS_RIGHT as libc::c_int - | EDGE_I422_TOP_HAS_RIGHT as libc::c_int - | EDGE_I420_TOP_HAS_RIGHT as libc::c_int) as libc::c_uint) - as EdgeFlags; - (*nwc).tts[2] = (edge_flags as libc::c_uint - & (EDGE_I444_LEFT_HAS_BOTTOM as libc::c_int - | EDGE_I422_LEFT_HAS_BOTTOM as libc::c_int - | EDGE_I420_LEFT_HAS_BOTTOM as libc::c_int) as libc::c_uint) - as EdgeFlags; - (*nwc).tbs[0] = (edge_flags as libc::c_uint - | (EDGE_I444_LEFT_HAS_BOTTOM as libc::c_int - | EDGE_I422_LEFT_HAS_BOTTOM as libc::c_int - | EDGE_I420_LEFT_HAS_BOTTOM as libc::c_int) as libc::c_uint) - as EdgeFlags; - (*nwc).tbs[1] = (edge_flags as libc::c_uint - | (EDGE_I444_TOP_HAS_RIGHT as libc::c_int - | EDGE_I422_TOP_HAS_RIGHT as libc::c_int - | EDGE_I420_TOP_HAS_RIGHT as libc::c_int) as libc::c_uint) - as EdgeFlags; + (*nwc).tts[0] = (EDGE_I444_TOP_HAS_RIGHT + | EDGE_I422_TOP_HAS_RIGHT + | EDGE_I420_TOP_HAS_RIGHT) + | (EDGE_I444_LEFT_HAS_BOTTOM | EDGE_I422_LEFT_HAS_BOTTOM | EDGE_I420_LEFT_HAS_BOTTOM); + (*nwc).tts[1] = edge_flags + & (EDGE_I444_TOP_HAS_RIGHT | EDGE_I422_TOP_HAS_RIGHT | EDGE_I420_TOP_HAS_RIGHT); + (*nwc).tts[2] = edge_flags + & (EDGE_I444_LEFT_HAS_BOTTOM | EDGE_I422_LEFT_HAS_BOTTOM | EDGE_I420_LEFT_HAS_BOTTOM); + (*nwc).tbs[0] = edge_flags + | (EDGE_I444_LEFT_HAS_BOTTOM | EDGE_I422_LEFT_HAS_BOTTOM | EDGE_I420_LEFT_HAS_BOTTOM); + (*nwc).tbs[1] = edge_flags + | (EDGE_I444_TOP_HAS_RIGHT | EDGE_I422_TOP_HAS_RIGHT | EDGE_I420_TOP_HAS_RIGHT); (*nwc).tbs[2] = 0 as EdgeFlags; }; } From b5d87ca05c74a1b31e94a7a0246953398be160d3 Mon Sep 17 00:00:00 2001 From: Khyber Sen Date: Thu, 24 Aug 2023 10:03:04 -0700 Subject: [PATCH 3/8] `fn init_edges`: Use `|=`. --- src/intra_edge.rs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/intra_edge.rs b/src/intra_edge.rs index 46b0e76b8..bdc900884 100644 --- a/src/intra_edge.rs +++ b/src/intra_edge.rs @@ -89,7 +89,7 @@ unsafe fn init_edges(node: *mut EdgeNode, bl: BlockLevel, edge_flags: EdgeFlags) (*nwc).h4[3] = edge_flags & (EDGE_I444_LEFT_HAS_BOTTOM | EDGE_I422_LEFT_HAS_BOTTOM | EDGE_I420_LEFT_HAS_BOTTOM); if bl == BL_16X16 { - (*nwc).h4[1] = (*nwc).h4[1] | edge_flags & EDGE_I420_TOP_HAS_RIGHT; + (*nwc).h4[1] |= edge_flags & EDGE_I420_TOP_HAS_RIGHT; } (*nwc).v4[0] = edge_flags | (EDGE_I444_TOP_HAS_RIGHT | EDGE_I422_TOP_HAS_RIGHT | EDGE_I420_TOP_HAS_RIGHT); @@ -98,8 +98,7 @@ unsafe fn init_edges(node: *mut EdgeNode, bl: BlockLevel, edge_flags: EdgeFlags) (*nwc).v4[3] = edge_flags & (EDGE_I444_TOP_HAS_RIGHT | EDGE_I422_TOP_HAS_RIGHT | EDGE_I420_TOP_HAS_RIGHT); if bl == BL_16X16 { - (*nwc).v4[1] = - (*nwc).v4[1] | edge_flags & (EDGE_I420_LEFT_HAS_BOTTOM | EDGE_I422_LEFT_HAS_BOTTOM); + (*nwc).v4[1] |= edge_flags & (EDGE_I420_LEFT_HAS_BOTTOM | EDGE_I422_LEFT_HAS_BOTTOM); } (*nwc).tls[0] = (EDGE_I444_TOP_HAS_RIGHT | EDGE_I422_TOP_HAS_RIGHT From 3e628efcb70e9dc16c9699c8958a197c97282ff4 Mon Sep 17 00:00:00 2001 From: Khyber Sen Date: Thu, 24 Aug 2023 10:04:18 -0700 Subject: [PATCH 4/8] `fn init_edges`: Make `nt` var a ref. --- src/intra_edge.rs | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/src/intra_edge.rs b/src/intra_edge.rs index bdc900884..23749617a 100644 --- a/src/intra_edge.rs +++ b/src/intra_edge.rs @@ -49,7 +49,7 @@ use crate::src::levels::BL_8X8; unsafe fn init_edges(node: *mut EdgeNode, bl: BlockLevel, edge_flags: EdgeFlags) { (*node).o = edge_flags; if bl == BL_8X8 { - let nt: *mut EdgeTip = node as *mut EdgeTip; + let nt = &mut *(node as *mut EdgeTip); (*node).h[0] = edge_flags | (EDGE_I444_LEFT_HAS_BOTTOM | EDGE_I422_LEFT_HAS_BOTTOM | EDGE_I420_LEFT_HAS_BOTTOM); (*node).h[1] = edge_flags @@ -61,15 +61,13 @@ unsafe fn init_edges(node: *mut EdgeNode, bl: BlockLevel, edge_flags: EdgeFlags) & ((EDGE_I444_TOP_HAS_RIGHT | EDGE_I422_TOP_HAS_RIGHT | EDGE_I420_TOP_HAS_RIGHT) | EDGE_I420_LEFT_HAS_BOTTOM | EDGE_I422_LEFT_HAS_BOTTOM); - (*nt).split[0] = (EDGE_I444_TOP_HAS_RIGHT - | EDGE_I422_TOP_HAS_RIGHT - | EDGE_I420_TOP_HAS_RIGHT) + nt.split[0] = (EDGE_I444_TOP_HAS_RIGHT | EDGE_I422_TOP_HAS_RIGHT | EDGE_I420_TOP_HAS_RIGHT) | (EDGE_I444_LEFT_HAS_BOTTOM | EDGE_I422_LEFT_HAS_BOTTOM | EDGE_I420_LEFT_HAS_BOTTOM); - (*nt).split[1] = (edge_flags + nt.split[1] = (edge_flags & (EDGE_I444_TOP_HAS_RIGHT | EDGE_I422_TOP_HAS_RIGHT | EDGE_I420_TOP_HAS_RIGHT)) | EDGE_I422_LEFT_HAS_BOTTOM; - (*nt).split[2] = edge_flags | EDGE_I444_TOP_HAS_RIGHT; - (*nt).split[3] = edge_flags + nt.split[2] = edge_flags | EDGE_I444_TOP_HAS_RIGHT; + nt.split[3] = edge_flags & (EDGE_I420_TOP_HAS_RIGHT | EDGE_I420_LEFT_HAS_BOTTOM | EDGE_I422_LEFT_HAS_BOTTOM); } else { let nwc: *mut EdgeBranch = node as *mut EdgeBranch; From 6d8a65e60ad7c6a89e9cc9e9cd88118f55186fb9 Mon Sep 17 00:00:00 2001 From: Khyber Sen Date: Thu, 24 Aug 2023 10:05:39 -0700 Subject: [PATCH 5/8] `fn init_edges`: Make `nwc` var a ref. --- src/intra_edge.rs | 50 ++++++++++++++++++++++------------------------- 1 file changed, 23 insertions(+), 27 deletions(-) diff --git a/src/intra_edge.rs b/src/intra_edge.rs index 23749617a..9a844ad68 100644 --- a/src/intra_edge.rs +++ b/src/intra_edge.rs @@ -70,7 +70,7 @@ unsafe fn init_edges(node: *mut EdgeNode, bl: BlockLevel, edge_flags: EdgeFlags) nt.split[3] = edge_flags & (EDGE_I420_TOP_HAS_RIGHT | EDGE_I420_LEFT_HAS_BOTTOM | EDGE_I422_LEFT_HAS_BOTTOM); } else { - let nwc: *mut EdgeBranch = node as *mut EdgeBranch; + let nwc = &mut *(node as *mut EdgeBranch); (*node).h[0] = edge_flags | (EDGE_I444_LEFT_HAS_BOTTOM | EDGE_I422_LEFT_HAS_BOTTOM | EDGE_I420_LEFT_HAS_BOTTOM); (*node).h[1] = edge_flags @@ -79,51 +79,47 @@ unsafe fn init_edges(node: *mut EdgeNode, bl: BlockLevel, edge_flags: EdgeFlags) | (EDGE_I444_TOP_HAS_RIGHT | EDGE_I422_TOP_HAS_RIGHT | EDGE_I420_TOP_HAS_RIGHT); (*node).v[1] = edge_flags & (EDGE_I444_TOP_HAS_RIGHT | EDGE_I422_TOP_HAS_RIGHT | EDGE_I420_TOP_HAS_RIGHT); - (*nwc).h4[0] = edge_flags + nwc.h4[0] = edge_flags | (EDGE_I444_LEFT_HAS_BOTTOM | EDGE_I422_LEFT_HAS_BOTTOM | EDGE_I420_LEFT_HAS_BOTTOM); - (*nwc).h4[2] = + nwc.h4[2] = EDGE_I444_LEFT_HAS_BOTTOM | EDGE_I422_LEFT_HAS_BOTTOM | EDGE_I420_LEFT_HAS_BOTTOM; - (*nwc).h4[1] = (*nwc).h4[2]; - (*nwc).h4[3] = edge_flags + nwc.h4[1] = nwc.h4[2]; + nwc.h4[3] = edge_flags & (EDGE_I444_LEFT_HAS_BOTTOM | EDGE_I422_LEFT_HAS_BOTTOM | EDGE_I420_LEFT_HAS_BOTTOM); if bl == BL_16X16 { - (*nwc).h4[1] |= edge_flags & EDGE_I420_TOP_HAS_RIGHT; + nwc.h4[1] |= edge_flags & EDGE_I420_TOP_HAS_RIGHT; } - (*nwc).v4[0] = edge_flags + nwc.v4[0] = edge_flags | (EDGE_I444_TOP_HAS_RIGHT | EDGE_I422_TOP_HAS_RIGHT | EDGE_I420_TOP_HAS_RIGHT); - (*nwc).v4[2] = EDGE_I444_TOP_HAS_RIGHT | EDGE_I422_TOP_HAS_RIGHT | EDGE_I420_TOP_HAS_RIGHT; - (*nwc).v4[1] = (*nwc).v4[2]; - (*nwc).v4[3] = edge_flags + nwc.v4[2] = EDGE_I444_TOP_HAS_RIGHT | EDGE_I422_TOP_HAS_RIGHT | EDGE_I420_TOP_HAS_RIGHT; + nwc.v4[1] = nwc.v4[2]; + nwc.v4[3] = edge_flags & (EDGE_I444_TOP_HAS_RIGHT | EDGE_I422_TOP_HAS_RIGHT | EDGE_I420_TOP_HAS_RIGHT); if bl == BL_16X16 { - (*nwc).v4[1] |= edge_flags & (EDGE_I420_LEFT_HAS_BOTTOM | EDGE_I422_LEFT_HAS_BOTTOM); + nwc.v4[1] |= edge_flags & (EDGE_I420_LEFT_HAS_BOTTOM | EDGE_I422_LEFT_HAS_BOTTOM); } - (*nwc).tls[0] = (EDGE_I444_TOP_HAS_RIGHT - | EDGE_I422_TOP_HAS_RIGHT - | EDGE_I420_TOP_HAS_RIGHT) + nwc.tls[0] = (EDGE_I444_TOP_HAS_RIGHT | EDGE_I422_TOP_HAS_RIGHT | EDGE_I420_TOP_HAS_RIGHT) | (EDGE_I444_LEFT_HAS_BOTTOM | EDGE_I422_LEFT_HAS_BOTTOM | EDGE_I420_LEFT_HAS_BOTTOM); - (*nwc).tls[1] = edge_flags + nwc.tls[1] = edge_flags & (EDGE_I444_LEFT_HAS_BOTTOM | EDGE_I422_LEFT_HAS_BOTTOM | EDGE_I420_LEFT_HAS_BOTTOM); - (*nwc).tls[2] = edge_flags + nwc.tls[2] = edge_flags & (EDGE_I444_TOP_HAS_RIGHT | EDGE_I422_TOP_HAS_RIGHT | EDGE_I420_TOP_HAS_RIGHT); - (*nwc).trs[0] = edge_flags + nwc.trs[0] = edge_flags | (EDGE_I444_TOP_HAS_RIGHT | EDGE_I422_TOP_HAS_RIGHT | EDGE_I420_TOP_HAS_RIGHT); - (*nwc).trs[1] = edge_flags + nwc.trs[1] = edge_flags | (EDGE_I444_LEFT_HAS_BOTTOM | EDGE_I422_LEFT_HAS_BOTTOM | EDGE_I420_LEFT_HAS_BOTTOM); - (*nwc).trs[2] = 0 as EdgeFlags; - (*nwc).tts[0] = (EDGE_I444_TOP_HAS_RIGHT - | EDGE_I422_TOP_HAS_RIGHT - | EDGE_I420_TOP_HAS_RIGHT) + nwc.trs[2] = 0 as EdgeFlags; + nwc.tts[0] = (EDGE_I444_TOP_HAS_RIGHT | EDGE_I422_TOP_HAS_RIGHT | EDGE_I420_TOP_HAS_RIGHT) | (EDGE_I444_LEFT_HAS_BOTTOM | EDGE_I422_LEFT_HAS_BOTTOM | EDGE_I420_LEFT_HAS_BOTTOM); - (*nwc).tts[1] = edge_flags + nwc.tts[1] = edge_flags & (EDGE_I444_TOP_HAS_RIGHT | EDGE_I422_TOP_HAS_RIGHT | EDGE_I420_TOP_HAS_RIGHT); - (*nwc).tts[2] = edge_flags + nwc.tts[2] = edge_flags & (EDGE_I444_LEFT_HAS_BOTTOM | EDGE_I422_LEFT_HAS_BOTTOM | EDGE_I420_LEFT_HAS_BOTTOM); - (*nwc).tbs[0] = edge_flags + nwc.tbs[0] = edge_flags | (EDGE_I444_LEFT_HAS_BOTTOM | EDGE_I422_LEFT_HAS_BOTTOM | EDGE_I420_LEFT_HAS_BOTTOM); - (*nwc).tbs[1] = edge_flags + nwc.tbs[1] = edge_flags | (EDGE_I444_TOP_HAS_RIGHT | EDGE_I422_TOP_HAS_RIGHT | EDGE_I420_TOP_HAS_RIGHT); - (*nwc).tbs[2] = 0 as EdgeFlags; + nwc.tbs[2] = 0 as EdgeFlags; }; } unsafe extern "C" fn init_mode_node( From 60b8722614c4ef0751330b2f68507878dc04aa32 Mon Sep 17 00:00:00 2001 From: Khyber Sen Date: Thu, 24 Aug 2023 10:07:01 -0700 Subject: [PATCH 6/8] `fn init_edges`: Make `node` vars refs, but only after their variant type is determined. --- src/intra_edge.rs | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/intra_edge.rs b/src/intra_edge.rs index 9a844ad68..e244fb97a 100644 --- a/src/intra_edge.rs +++ b/src/intra_edge.rs @@ -50,14 +50,15 @@ unsafe fn init_edges(node: *mut EdgeNode, bl: BlockLevel, edge_flags: EdgeFlags) (*node).o = edge_flags; if bl == BL_8X8 { let nt = &mut *(node as *mut EdgeTip); - (*node).h[0] = edge_flags + let node = &mut nt.node; + node.h[0] = edge_flags | (EDGE_I444_LEFT_HAS_BOTTOM | EDGE_I422_LEFT_HAS_BOTTOM | EDGE_I420_LEFT_HAS_BOTTOM); - (*node).h[1] = edge_flags + node.h[1] = edge_flags & ((EDGE_I444_LEFT_HAS_BOTTOM | EDGE_I422_LEFT_HAS_BOTTOM | EDGE_I420_LEFT_HAS_BOTTOM) | EDGE_I420_TOP_HAS_RIGHT); - (*node).v[0] = edge_flags + node.v[0] = edge_flags | (EDGE_I444_TOP_HAS_RIGHT | EDGE_I422_TOP_HAS_RIGHT | EDGE_I420_TOP_HAS_RIGHT); - (*node).v[1] = edge_flags + node.v[1] = edge_flags & ((EDGE_I444_TOP_HAS_RIGHT | EDGE_I422_TOP_HAS_RIGHT | EDGE_I420_TOP_HAS_RIGHT) | EDGE_I420_LEFT_HAS_BOTTOM | EDGE_I422_LEFT_HAS_BOTTOM); @@ -71,13 +72,14 @@ unsafe fn init_edges(node: *mut EdgeNode, bl: BlockLevel, edge_flags: EdgeFlags) & (EDGE_I420_TOP_HAS_RIGHT | EDGE_I420_LEFT_HAS_BOTTOM | EDGE_I422_LEFT_HAS_BOTTOM); } else { let nwc = &mut *(node as *mut EdgeBranch); - (*node).h[0] = edge_flags + let node = &mut nwc.node; + node.h[0] = edge_flags | (EDGE_I444_LEFT_HAS_BOTTOM | EDGE_I422_LEFT_HAS_BOTTOM | EDGE_I420_LEFT_HAS_BOTTOM); - (*node).h[1] = edge_flags + node.h[1] = edge_flags & (EDGE_I444_LEFT_HAS_BOTTOM | EDGE_I422_LEFT_HAS_BOTTOM | EDGE_I420_LEFT_HAS_BOTTOM); - (*node).v[0] = edge_flags + node.v[0] = edge_flags | (EDGE_I444_TOP_HAS_RIGHT | EDGE_I422_TOP_HAS_RIGHT | EDGE_I420_TOP_HAS_RIGHT); - (*node).v[1] = edge_flags + node.v[1] = edge_flags & (EDGE_I444_TOP_HAS_RIGHT | EDGE_I422_TOP_HAS_RIGHT | EDGE_I420_TOP_HAS_RIGHT); nwc.h4[0] = edge_flags | (EDGE_I444_LEFT_HAS_BOTTOM | EDGE_I422_LEFT_HAS_BOTTOM | EDGE_I420_LEFT_HAS_BOTTOM); From c878d7155045bd4d3204cd3f95d5ad140642ece6 Mon Sep 17 00:00:00 2001 From: Khyber Sen Date: Thu, 24 Aug 2023 10:11:57 -0700 Subject: [PATCH 7/8] `fn init_edges`: Add back line breaks from C. --- src/intra_edge.rs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/intra_edge.rs b/src/intra_edge.rs index e244fb97a..e09c31640 100644 --- a/src/intra_edge.rs +++ b/src/intra_edge.rs @@ -48,20 +48,24 @@ use crate::src::levels::BL_8X8; unsafe fn init_edges(node: *mut EdgeNode, bl: BlockLevel, edge_flags: EdgeFlags) { (*node).o = edge_flags; + if bl == BL_8X8 { let nt = &mut *(node as *mut EdgeTip); let node = &mut nt.node; + node.h[0] = edge_flags | (EDGE_I444_LEFT_HAS_BOTTOM | EDGE_I422_LEFT_HAS_BOTTOM | EDGE_I420_LEFT_HAS_BOTTOM); node.h[1] = edge_flags & ((EDGE_I444_LEFT_HAS_BOTTOM | EDGE_I422_LEFT_HAS_BOTTOM | EDGE_I420_LEFT_HAS_BOTTOM) | EDGE_I420_TOP_HAS_RIGHT); + node.v[0] = edge_flags | (EDGE_I444_TOP_HAS_RIGHT | EDGE_I422_TOP_HAS_RIGHT | EDGE_I420_TOP_HAS_RIGHT); node.v[1] = edge_flags & ((EDGE_I444_TOP_HAS_RIGHT | EDGE_I422_TOP_HAS_RIGHT | EDGE_I420_TOP_HAS_RIGHT) | EDGE_I420_LEFT_HAS_BOTTOM | EDGE_I422_LEFT_HAS_BOTTOM); + nt.split[0] = (EDGE_I444_TOP_HAS_RIGHT | EDGE_I422_TOP_HAS_RIGHT | EDGE_I420_TOP_HAS_RIGHT) | (EDGE_I444_LEFT_HAS_BOTTOM | EDGE_I422_LEFT_HAS_BOTTOM | EDGE_I420_LEFT_HAS_BOTTOM); nt.split[1] = (edge_flags @@ -73,14 +77,17 @@ unsafe fn init_edges(node: *mut EdgeNode, bl: BlockLevel, edge_flags: EdgeFlags) } else { let nwc = &mut *(node as *mut EdgeBranch); let node = &mut nwc.node; + node.h[0] = edge_flags | (EDGE_I444_LEFT_HAS_BOTTOM | EDGE_I422_LEFT_HAS_BOTTOM | EDGE_I420_LEFT_HAS_BOTTOM); node.h[1] = edge_flags & (EDGE_I444_LEFT_HAS_BOTTOM | EDGE_I422_LEFT_HAS_BOTTOM | EDGE_I420_LEFT_HAS_BOTTOM); + node.v[0] = edge_flags | (EDGE_I444_TOP_HAS_RIGHT | EDGE_I422_TOP_HAS_RIGHT | EDGE_I420_TOP_HAS_RIGHT); node.v[1] = edge_flags & (EDGE_I444_TOP_HAS_RIGHT | EDGE_I422_TOP_HAS_RIGHT | EDGE_I420_TOP_HAS_RIGHT); + nwc.h4[0] = edge_flags | (EDGE_I444_LEFT_HAS_BOTTOM | EDGE_I422_LEFT_HAS_BOTTOM | EDGE_I420_LEFT_HAS_BOTTOM); nwc.h4[2] = @@ -91,6 +98,7 @@ unsafe fn init_edges(node: *mut EdgeNode, bl: BlockLevel, edge_flags: EdgeFlags) if bl == BL_16X16 { nwc.h4[1] |= edge_flags & EDGE_I420_TOP_HAS_RIGHT; } + nwc.v4[0] = edge_flags | (EDGE_I444_TOP_HAS_RIGHT | EDGE_I422_TOP_HAS_RIGHT | EDGE_I420_TOP_HAS_RIGHT); nwc.v4[2] = EDGE_I444_TOP_HAS_RIGHT | EDGE_I422_TOP_HAS_RIGHT | EDGE_I420_TOP_HAS_RIGHT; @@ -100,23 +108,27 @@ unsafe fn init_edges(node: *mut EdgeNode, bl: BlockLevel, edge_flags: EdgeFlags) if bl == BL_16X16 { nwc.v4[1] |= edge_flags & (EDGE_I420_LEFT_HAS_BOTTOM | EDGE_I422_LEFT_HAS_BOTTOM); } + nwc.tls[0] = (EDGE_I444_TOP_HAS_RIGHT | EDGE_I422_TOP_HAS_RIGHT | EDGE_I420_TOP_HAS_RIGHT) | (EDGE_I444_LEFT_HAS_BOTTOM | EDGE_I422_LEFT_HAS_BOTTOM | EDGE_I420_LEFT_HAS_BOTTOM); nwc.tls[1] = edge_flags & (EDGE_I444_LEFT_HAS_BOTTOM | EDGE_I422_LEFT_HAS_BOTTOM | EDGE_I420_LEFT_HAS_BOTTOM); nwc.tls[2] = edge_flags & (EDGE_I444_TOP_HAS_RIGHT | EDGE_I422_TOP_HAS_RIGHT | EDGE_I420_TOP_HAS_RIGHT); + nwc.trs[0] = edge_flags | (EDGE_I444_TOP_HAS_RIGHT | EDGE_I422_TOP_HAS_RIGHT | EDGE_I420_TOP_HAS_RIGHT); nwc.trs[1] = edge_flags | (EDGE_I444_LEFT_HAS_BOTTOM | EDGE_I422_LEFT_HAS_BOTTOM | EDGE_I420_LEFT_HAS_BOTTOM); nwc.trs[2] = 0 as EdgeFlags; + nwc.tts[0] = (EDGE_I444_TOP_HAS_RIGHT | EDGE_I422_TOP_HAS_RIGHT | EDGE_I420_TOP_HAS_RIGHT) | (EDGE_I444_LEFT_HAS_BOTTOM | EDGE_I422_LEFT_HAS_BOTTOM | EDGE_I420_LEFT_HAS_BOTTOM); nwc.tts[1] = edge_flags & (EDGE_I444_TOP_HAS_RIGHT | EDGE_I422_TOP_HAS_RIGHT | EDGE_I420_TOP_HAS_RIGHT); nwc.tts[2] = edge_flags & (EDGE_I444_LEFT_HAS_BOTTOM | EDGE_I422_LEFT_HAS_BOTTOM | EDGE_I420_LEFT_HAS_BOTTOM); + nwc.tbs[0] = edge_flags | (EDGE_I444_LEFT_HAS_BOTTOM | EDGE_I422_LEFT_HAS_BOTTOM | EDGE_I420_LEFT_HAS_BOTTOM); nwc.tbs[1] = edge_flags From eb6fa7afec8f2ef9908888e46c3134493668c1f7 Mon Sep 17 00:00:00 2001 From: Khyber Sen Date: Thu, 24 Aug 2023 10:12:47 -0700 Subject: [PATCH 8/8] `fn init_edges`: Reverse the order of double initializations to be me more idiomatic. --- src/intra_edge.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/intra_edge.rs b/src/intra_edge.rs index e09c31640..b85b7fdbf 100644 --- a/src/intra_edge.rs +++ b/src/intra_edge.rs @@ -90,9 +90,9 @@ unsafe fn init_edges(node: *mut EdgeNode, bl: BlockLevel, edge_flags: EdgeFlags) nwc.h4[0] = edge_flags | (EDGE_I444_LEFT_HAS_BOTTOM | EDGE_I422_LEFT_HAS_BOTTOM | EDGE_I420_LEFT_HAS_BOTTOM); - nwc.h4[2] = + nwc.h4[1] = EDGE_I444_LEFT_HAS_BOTTOM | EDGE_I422_LEFT_HAS_BOTTOM | EDGE_I420_LEFT_HAS_BOTTOM; - nwc.h4[1] = nwc.h4[2]; + nwc.h4[2] = nwc.h4[1]; nwc.h4[3] = edge_flags & (EDGE_I444_LEFT_HAS_BOTTOM | EDGE_I422_LEFT_HAS_BOTTOM | EDGE_I420_LEFT_HAS_BOTTOM); if bl == BL_16X16 { @@ -101,8 +101,8 @@ unsafe fn init_edges(node: *mut EdgeNode, bl: BlockLevel, edge_flags: EdgeFlags) nwc.v4[0] = edge_flags | (EDGE_I444_TOP_HAS_RIGHT | EDGE_I422_TOP_HAS_RIGHT | EDGE_I420_TOP_HAS_RIGHT); - nwc.v4[2] = EDGE_I444_TOP_HAS_RIGHT | EDGE_I422_TOP_HAS_RIGHT | EDGE_I420_TOP_HAS_RIGHT; - nwc.v4[1] = nwc.v4[2]; + nwc.v4[1] = EDGE_I444_TOP_HAS_RIGHT | EDGE_I422_TOP_HAS_RIGHT | EDGE_I420_TOP_HAS_RIGHT; + nwc.v4[2] = nwc.v4[1]; nwc.v4[3] = edge_flags & (EDGE_I444_TOP_HAS_RIGHT | EDGE_I422_TOP_HAS_RIGHT | EDGE_I420_TOP_HAS_RIGHT); if bl == BL_16X16 {