Enable shared_dictionary for quality 3 and 4.

PiperOrigin-RevId: 843477953
diff --git a/c/enc/backward_references.c b/c/enc/backward_references.c
index 5d1c0ed..b48dd85 100644
--- a/c/enc/backward_references.c
+++ b/c/enc/backward_references.c
@@ -131,6 +131,14 @@
 #define PREFIX() D
 #define ENABLE_COMPOUND_DICTIONARY 1
 
+#define HASHER() H3
+/* NOLINTNEXTLINE(build/include) */
+#include "backward_references_inc.h"
+#undef HASHER
+#define HASHER() H4
+/* NOLINTNEXTLINE(build/include) */
+#include "backward_references_inc.h"
+#undef HASHER
 #define HASHER() H5
 /* NOLINTNEXTLINE(build/include) */
 #include "backward_references_inc.h"
@@ -192,6 +200,8 @@
             literal_context_lut, params, hasher, dist_cache,        \
             last_insert_len, commands, num_commands, num_literals); \
         return;
+      CASE_(3)
+      CASE_(4)
       CASE_(5)
       CASE_(6)
 #if defined(BROTLI_MAX_SIMD_QUALITY)
diff --git a/c/enc/hash_longest_match_quickly_inc.h b/c/enc/hash_longest_match_quickly_inc.h
index 9db75cc..12fdb44 100644
--- a/c/enc/hash_longest_match_quickly_inc.h
+++ b/c/enc/hash_longest_match_quickly_inc.h
@@ -168,7 +168,7 @@
   BROTLI_DCHECK(cur_ix_masked + max_length <= ring_buffer_mask + 1);
 
   out->len_code_delta = 0;
-  if (prev_ix < cur_ix) {
+  if (prev_ix < cur_ix && cached_backward <= max_backward) {
     prev_ix &= (uint32_t)ring_buffer_mask;
     if (compare_char == data[prev_ix + best_len]) {
       const size_t len = FindMatchLengthWithLimit(